Merge "Move away from using @hide in benchmark library" into androidx-main
diff --git a/activity/activity-ktx/api/current.ignore b/activity/activity-ktx/api/current.ignore
index eabc0b7..a0f521e 100644
--- a/activity/activity-ktx/api/current.ignore
+++ b/activity/activity-ktx/api/current.ignore
@@ -1,4 +1,10 @@
 // Baseline format: 1.0
+ChangedType: androidx.activity.ActivityViewModelLazyKt#viewModels(androidx.activity.ComponentActivity, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.activity.ActivityViewModelLazyKt.viewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.activity.ActivityViewModelLazyKt#viewModels(androidx.activity.ComponentActivity, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.activity.ActivityViewModelLazyKt.viewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+
+
 InvalidNullConversion: androidx.activity.result.ActivityResultCallerKt#registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O>, I, androidx.activity.result.ActivityResultRegistry, kotlin.jvm.functions.Function1<? super O,kotlin.Unit>) parameter #2:
     Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter input in androidx.activity.result.ActivityResultCallerKt.registerForActivityResult(androidx.activity.result.ActivityResultCaller arg1, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I input, androidx.activity.result.ActivityResultRegistry registry, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback)
 InvalidNullConversion: androidx.activity.result.ActivityResultCallerKt#registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O>, I, kotlin.jvm.functions.Function1<? super O,kotlin.Unit>) parameter #2:
diff --git a/activity/activity-ktx/api/current.txt b/activity/activity-ktx/api/current.txt
index 4514923..7b96bf7 100644
--- a/activity/activity-ktx/api/current.txt
+++ b/activity/activity-ktx/api/current.txt
@@ -2,8 +2,8 @@
 package androidx.activity {
 
   public final class ActivityViewModelLazyKt {
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
   }
 
   public final class PipHintTrackerKt {
diff --git a/activity/activity-ktx/api/restricted_current.ignore b/activity/activity-ktx/api/restricted_current.ignore
index eabc0b7..a0f521e 100644
--- a/activity/activity-ktx/api/restricted_current.ignore
+++ b/activity/activity-ktx/api/restricted_current.ignore
@@ -1,4 +1,10 @@
 // Baseline format: 1.0
+ChangedType: androidx.activity.ActivityViewModelLazyKt#viewModels(androidx.activity.ComponentActivity, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.activity.ActivityViewModelLazyKt.viewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.activity.ActivityViewModelLazyKt#viewModels(androidx.activity.ComponentActivity, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.activity.ActivityViewModelLazyKt.viewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+
+
 InvalidNullConversion: androidx.activity.result.ActivityResultCallerKt#registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O>, I, androidx.activity.result.ActivityResultRegistry, kotlin.jvm.functions.Function1<? super O,kotlin.Unit>) parameter #2:
     Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter input in androidx.activity.result.ActivityResultCallerKt.registerForActivityResult(androidx.activity.result.ActivityResultCaller arg1, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I input, androidx.activity.result.ActivityResultRegistry registry, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback)
 InvalidNullConversion: androidx.activity.result.ActivityResultCallerKt#registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O>, I, kotlin.jvm.functions.Function1<? super O,kotlin.Unit>) parameter #2:
diff --git a/activity/activity-ktx/api/restricted_current.txt b/activity/activity-ktx/api/restricted_current.txt
index 4514923..7b96bf7 100644
--- a/activity/activity-ktx/api/restricted_current.txt
+++ b/activity/activity-ktx/api/restricted_current.txt
@@ -2,8 +2,8 @@
 package androidx.activity {
 
   public final class ActivityViewModelLazyKt {
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
   }
 
   public final class PipHintTrackerKt {
diff --git a/appactions/builtintypes/builtintypes-core/api/current.txt b/appactions/builtintypes/builtintypes-core/api/current.txt
index 198ed2d..4033c72 100644
--- a/appactions/builtintypes/builtintypes-core/api/current.txt
+++ b/appactions/builtintypes/builtintypes-core/api/current.txt
@@ -1,23 +1,18 @@
 // Signature format: 4.0
 package androidx.appactions.builtintypes.properties {
 
-  public final class Description {
-    ctor public Description(androidx.appactions.builtintypes.properties.Description.CanonicalValue canonicalValue);
-    ctor public Description(String text);
-    method public androidx.appactions.builtintypes.properties.Description.CanonicalValue? getAsCanonicalValue();
+  public final class ByDay {
+    ctor public ByDay(androidx.appactions.builtintypes.types.DayOfWeek dayOfWeek);
+    ctor public ByDay(String text);
+    method public androidx.appactions.builtintypes.types.DayOfWeek? getAsDayOfWeek();
     method public String? getAsText();
-    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Description.Mapper<R> mapper);
-    property public final androidx.appactions.builtintypes.properties.Description.CanonicalValue? asCanonicalValue;
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.ByDay.Mapper<R> mapper);
+    property public final androidx.appactions.builtintypes.types.DayOfWeek? asDayOfWeek;
     property public final String? asText;
   }
 
-  public abstract static class Description.CanonicalValue {
-    method public abstract String getTextValue();
-    property public abstract String textValue;
-  }
-
-  public static interface Description.Mapper<R> {
-    method public default R canonicalValue(androidx.appactions.builtintypes.properties.Description.CanonicalValue instance);
+  public static interface ByDay.Mapper<R> {
+    method public default R dayOfWeek(androidx.appactions.builtintypes.types.DayOfWeek instance);
     method public R orElse();
     method public default R text(String instance);
   }
@@ -43,53 +38,125 @@
     method public default R text(String instance);
   }
 
-  public final class Name {
-    ctor public Name(androidx.appactions.builtintypes.properties.Name.CanonicalValue canonicalValue);
-    ctor public Name(String text);
-    method public androidx.appactions.builtintypes.properties.Name.CanonicalValue? getAsCanonicalValue();
-    method public String? getAsText();
-    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Name.Mapper<R> mapper);
-    property public final androidx.appactions.builtintypes.properties.Name.CanonicalValue? asCanonicalValue;
-    property public final String? asText;
-  }
-
-  public abstract static class Name.CanonicalValue {
-    method public abstract String getTextValue();
-    property public abstract String textValue;
-  }
-
-  public static interface Name.Mapper<R> {
-    method public default R canonicalValue(androidx.appactions.builtintypes.properties.Name.CanonicalValue instance);
-    method public R orElse();
-    method public default R text(String instance);
-  }
-
-  public final class Temporal {
-    ctor public Temporal(androidx.appactions.builtintypes.properties.Temporal.CanonicalValue canonicalValue);
-    ctor public Temporal(String text);
-    ctor public Temporal(java.time.LocalDateTime localDateTime);
-    ctor public Temporal(java.time.ZonedDateTime zonedDateTime);
-    method public androidx.appactions.builtintypes.properties.Temporal.CanonicalValue? getAsCanonicalValue();
+  public final class EndDate {
+    ctor public EndDate(java.time.LocalDate date);
+    ctor public EndDate(java.time.LocalDateTime localDateTime);
+    ctor public EndDate(java.time.ZonedDateTime zonedDateTime);
+    method public java.time.LocalDate? getAsDate();
     method public java.time.LocalDateTime? getAsLocalDateTime();
-    method public String? getAsText();
     method public java.time.ZonedDateTime? getAsZonedDateTime();
-    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Temporal.Mapper<R> mapper);
-    property public final androidx.appactions.builtintypes.properties.Temporal.CanonicalValue? asCanonicalValue;
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.EndDate.Mapper<R> mapper);
+    property public final java.time.LocalDate? asDate;
     property public final java.time.LocalDateTime? asLocalDateTime;
-    property public final String? asText;
     property public final java.time.ZonedDateTime? asZonedDateTime;
   }
 
-  public abstract static class Temporal.CanonicalValue {
-    method public abstract String getTextValue();
-    property public abstract String textValue;
-  }
-
-  public static interface Temporal.Mapper<R> {
-    method public default R canonicalValue(androidx.appactions.builtintypes.properties.Temporal.CanonicalValue instance);
+  public static interface EndDate.Mapper<R> {
+    method public default R date(java.time.LocalDate instance);
     method public default R localDateTime(java.time.LocalDateTime instance);
     method public R orElse();
+    method public default R zonedDateTime(java.time.ZonedDateTime instance);
+  }
+
+  public final class EndTime {
+    ctor public EndTime(java.time.LocalDateTime localDateTime);
+    ctor public EndTime(java.time.LocalTime time);
+    ctor public EndTime(java.time.ZonedDateTime zonedDateTime);
+    method public java.time.LocalDateTime? getAsLocalDateTime();
+    method public java.time.LocalTime? getAsTime();
+    method public java.time.ZonedDateTime? getAsZonedDateTime();
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.EndTime.Mapper<R> mapper);
+    property public final java.time.LocalDateTime? asLocalDateTime;
+    property public final java.time.LocalTime? asTime;
+    property public final java.time.ZonedDateTime? asZonedDateTime;
+  }
+
+  public static interface EndTime.Mapper<R> {
+    method public default R localDateTime(java.time.LocalDateTime instance);
+    method public R orElse();
+    method public default R time(java.time.LocalTime instance);
+    method public default R zonedDateTime(java.time.ZonedDateTime instance);
+  }
+
+  public final class ExceptDate {
+    ctor public ExceptDate(java.time.LocalDate date);
+    ctor public ExceptDate(java.time.LocalDateTime localDateTime);
+    ctor public ExceptDate(java.time.ZonedDateTime zonedDateTime);
+    method public java.time.LocalDate? getAsDate();
+    method public java.time.LocalDateTime? getAsLocalDateTime();
+    method public java.time.ZonedDateTime? getAsZonedDateTime();
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.ExceptDate.Mapper<R> mapper);
+    property public final java.time.LocalDate? asDate;
+    property public final java.time.LocalDateTime? asLocalDateTime;
+    property public final java.time.ZonedDateTime? asZonedDateTime;
+  }
+
+  public static interface ExceptDate.Mapper<R> {
+    method public default R date(java.time.LocalDate instance);
+    method public default R localDateTime(java.time.LocalDateTime instance);
+    method public R orElse();
+    method public default R zonedDateTime(java.time.ZonedDateTime instance);
+  }
+
+  public final class Name {
+    ctor public Name(String text);
+    method public String? getAsText();
+    property public final String? asText;
+  }
+
+  public final class RepeatFrequency {
+    ctor public RepeatFrequency(String text);
+    ctor public RepeatFrequency(java.time.Duration duration);
+    method public java.time.Duration? getAsDuration();
+    method public String? getAsText();
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.RepeatFrequency.Mapper<R> mapper);
+    property public final java.time.Duration? asDuration;
+    property public final String? asText;
+  }
+
+  public static interface RepeatFrequency.Mapper<R> {
+    method public default R duration(java.time.Duration instance);
+    method public R orElse();
     method public default R text(String instance);
+  }
+
+  public final class StartDate {
+    ctor public StartDate(java.time.LocalDate date);
+    ctor public StartDate(java.time.LocalDateTime localDateTime);
+    ctor public StartDate(java.time.ZonedDateTime zonedDateTime);
+    method public java.time.LocalDate? getAsDate();
+    method public java.time.LocalDateTime? getAsLocalDateTime();
+    method public java.time.ZonedDateTime? getAsZonedDateTime();
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.StartDate.Mapper<R> mapper);
+    property public final java.time.LocalDate? asDate;
+    property public final java.time.LocalDateTime? asLocalDateTime;
+    property public final java.time.ZonedDateTime? asZonedDateTime;
+  }
+
+  public static interface StartDate.Mapper<R> {
+    method public default R date(java.time.LocalDate instance);
+    method public default R localDateTime(java.time.LocalDateTime instance);
+    method public R orElse();
+    method public default R zonedDateTime(java.time.ZonedDateTime instance);
+  }
+
+  public final class StartTime {
+    ctor public StartTime(java.time.LocalDateTime localDateTime);
+    ctor public StartTime(java.time.LocalTime time);
+    ctor public StartTime(java.time.ZonedDateTime zonedDateTime);
+    method public java.time.LocalDateTime? getAsLocalDateTime();
+    method public java.time.LocalTime? getAsTime();
+    method public java.time.ZonedDateTime? getAsZonedDateTime();
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.StartTime.Mapper<R> mapper);
+    property public final java.time.LocalDateTime? asLocalDateTime;
+    property public final java.time.LocalTime? asTime;
+    property public final java.time.ZonedDateTime? asZonedDateTime;
+  }
+
+  public static interface StartTime.Mapper<R> {
+    method public default R localDateTime(java.time.LocalDateTime instance);
+    method public R orElse();
+    method public default R time(java.time.LocalTime instance);
     method public default R zonedDateTime(java.time.ZonedDateTime instance);
   }
 
@@ -97,27 +164,271 @@
 
 package androidx.appactions.builtintypes.types {
 
-  public abstract class GenericThing<Self extends androidx.appactions.builtintypes.types.GenericThing<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericThing.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Thing {
-    ctor public GenericThing(androidx.appactions.builtintypes.types.Thing thing);
+  public interface Alarm extends androidx.appactions.builtintypes.types.Thing {
+    method public default static androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder();
+    method public androidx.appactions.builtintypes.types.Schedule? getAlarmSchedule();
+    method public androidx.appactions.builtintypes.types.Alarm.Builder<?> toBuilder();
+    property public abstract androidx.appactions.builtintypes.types.Schedule? alarmSchedule;
+    field public static final androidx.appactions.builtintypes.types.Alarm.Companion Companion;
+  }
+
+  public static interface Alarm.Builder<Self extends androidx.appactions.builtintypes.types.Alarm.Builder<Self>> extends androidx.appactions.builtintypes.types.Thing.Builder<Self> {
+    method public androidx.appactions.builtintypes.types.Alarm build();
+    method public Self setAlarmSchedule(androidx.appactions.builtintypes.types.Schedule? schedule);
+    method public default Self setDisambiguatingDescription(androidx.appactions.builtintypes.types.Alarm.DisambiguatingDescriptionValue canonicalValue);
+  }
+
+  public static final class Alarm.Companion {
+    method public androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder();
+  }
+
+  public static final class Alarm.DisambiguatingDescriptionValue extends androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue {
+    method public String getTextValue();
+    property public String textValue;
+    field public static final androidx.appactions.builtintypes.types.Alarm.DisambiguatingDescriptionValue.Companion Companion;
+    field public static final androidx.appactions.builtintypes.types.Alarm.DisambiguatingDescriptionValue FAMILY_BELL;
+  }
+
+  public static final class Alarm.DisambiguatingDescriptionValue.Companion {
+  }
+
+  public final class DayOfWeek {
+    method public String getCanonicalUrl();
+    method public <R> R mapWhen(androidx.appactions.builtintypes.types.DayOfWeek.Mapper<R> mapper);
+    property public final String canonicalUrl;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek.Companion Companion;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek FRIDAY;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek MONDAY;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek PUBLIC_HOLIDAYS;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek SATURDAY;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek SUNDAY;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek THURSDAY;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek TUESDAY;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek WEDNESDAY;
+  }
+
+  public static final class DayOfWeek.Companion {
+  }
+
+  public static interface DayOfWeek.Mapper<R> {
+    method public default R friday();
+    method public default R monday();
+    method public R orElse();
+    method public default R publicHolidays();
+    method public default R saturday();
+    method public default R sunday();
+    method public default R thursday();
+    method public default R tuesday();
+    method public default R wednesday();
+  }
+
+  public abstract class GenericAlarm<Self extends androidx.appactions.builtintypes.types.GenericAlarm<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericAlarm.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Alarm {
+    ctor public GenericAlarm(androidx.appactions.builtintypes.types.Alarm alarm);
     method public final boolean equals(Object? other);
     method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
-    method public final androidx.appactions.builtintypes.properties.Description? getDescription();
+    method public final androidx.appactions.builtintypes.types.Schedule? getAlarmSchedule();
     method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
     method public final String? getIdentifier();
     method public final androidx.appactions.builtintypes.properties.Name? getName();
     method protected abstract String getSelfTypeName();
-    method public final androidx.appactions.builtintypes.properties.Temporal? getTemporal();
     method public final int hashCode();
     method public final Builder toBuilder();
     method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
     method public final String toString();
     property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
-    property public final androidx.appactions.builtintypes.properties.Description? description;
+    property public final androidx.appactions.builtintypes.types.Schedule? alarmSchedule;
     property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
     property public final String? identifier;
     property public final androidx.appactions.builtintypes.properties.Name? name;
     property protected abstract String selfTypeName;
-    property public final androidx.appactions.builtintypes.properties.Temporal? temporal;
+  }
+
+  public abstract static class GenericAlarm.Builder<Self extends androidx.appactions.builtintypes.types.GenericAlarm.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericAlarm<Built, Self>> implements androidx.appactions.builtintypes.types.Alarm.Builder<Self> {
+    ctor public GenericAlarm.Builder();
+    method public final Built build();
+    method protected abstract Built buildFromAlarm(androidx.appactions.builtintypes.types.Alarm alarm);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Self setAlarmSchedule(androidx.appactions.builtintypes.types.Schedule? schedule);
+    method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
+    method public final Self setIdentifier(String? text);
+    method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract class GenericIntangible<Self extends androidx.appactions.builtintypes.types.GenericIntangible<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericIntangible.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Intangible {
+    ctor public GenericIntangible(androidx.appactions.builtintypes.types.Intangible intangible);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
+    method public final String? getIdentifier();
+    method public final androidx.appactions.builtintypes.properties.Name? getName();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Builder toBuilder();
+    method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
+    property public final String? identifier;
+    property public final androidx.appactions.builtintypes.properties.Name? name;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract static class GenericIntangible.Builder<Self extends androidx.appactions.builtintypes.types.GenericIntangible.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericIntangible<Built, Self>> implements androidx.appactions.builtintypes.types.Intangible.Builder<Self> {
+    ctor public GenericIntangible.Builder();
+    method public final Built build();
+    method protected abstract Built buildFromIntangible(androidx.appactions.builtintypes.types.Intangible intangible);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
+    method public final Self setIdentifier(String? text);
+    method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract class GenericPerson<Self extends androidx.appactions.builtintypes.types.GenericPerson<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericPerson.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Person {
+    ctor public GenericPerson(androidx.appactions.builtintypes.types.Person person);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
+    method public final String? getEmail();
+    method public final String? getIdentifier();
+    method public final androidx.appactions.builtintypes.properties.Name? getName();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Builder toBuilder();
+    method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
+    property public final String? email;
+    property public final String? identifier;
+    property public final androidx.appactions.builtintypes.properties.Name? name;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract static class GenericPerson.Builder<Self extends androidx.appactions.builtintypes.types.GenericPerson.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericPerson<Built, Self>> implements androidx.appactions.builtintypes.types.Person.Builder<Self> {
+    ctor public GenericPerson.Builder();
+    method public final Built build();
+    method protected abstract Built buildFromPerson(androidx.appactions.builtintypes.types.Person person);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
+    method public final Self setEmail(String? text);
+    method public final Self setIdentifier(String? text);
+    method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract class GenericSchedule<Self extends androidx.appactions.builtintypes.types.GenericSchedule<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericSchedule.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Schedule {
+    ctor public GenericSchedule(androidx.appactions.builtintypes.types.Schedule schedule);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method public final java.util.List<androidx.appactions.builtintypes.properties.ByDay> getByDays();
+    method public final java.util.List<java.lang.Long> getByMonthDays();
+    method public final java.util.List<java.lang.Long> getByMonthWeeks();
+    method public final java.util.List<java.lang.Long> getByMonths();
+    method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
+    method public final androidx.appactions.builtintypes.properties.EndDate? getEndDate();
+    method public final androidx.appactions.builtintypes.properties.EndTime? getEndTime();
+    method public final androidx.appactions.builtintypes.properties.ExceptDate? getExceptDate();
+    method public final String? getIdentifier();
+    method public final androidx.appactions.builtintypes.properties.Name? getName();
+    method public final Long? getRepeatCount();
+    method public final androidx.appactions.builtintypes.properties.RepeatFrequency? getRepeatFrequency();
+    method public final String? getScheduleTimezone();
+    method protected abstract String getSelfTypeName();
+    method public final androidx.appactions.builtintypes.properties.StartDate? getStartDate();
+    method public final androidx.appactions.builtintypes.properties.StartTime? getStartTime();
+    method public final int hashCode();
+    method public final Builder toBuilder();
+    method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property public final java.util.List<androidx.appactions.builtintypes.properties.ByDay> byDays;
+    property public final java.util.List<java.lang.Long> byMonthDays;
+    property public final java.util.List<java.lang.Long> byMonthWeeks;
+    property public final java.util.List<java.lang.Long> byMonths;
+    property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
+    property public final androidx.appactions.builtintypes.properties.EndDate? endDate;
+    property public final androidx.appactions.builtintypes.properties.EndTime? endTime;
+    property public final androidx.appactions.builtintypes.properties.ExceptDate? exceptDate;
+    property public final String? identifier;
+    property public final androidx.appactions.builtintypes.properties.Name? name;
+    property public final Long? repeatCount;
+    property public final androidx.appactions.builtintypes.properties.RepeatFrequency? repeatFrequency;
+    property public final String? scheduleTimezone;
+    property protected abstract String selfTypeName;
+    property public final androidx.appactions.builtintypes.properties.StartDate? startDate;
+    property public final androidx.appactions.builtintypes.properties.StartTime? startTime;
+  }
+
+  public abstract static class GenericSchedule.Builder<Self extends androidx.appactions.builtintypes.types.GenericSchedule.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericSchedule<Built, Self>> implements androidx.appactions.builtintypes.types.Schedule.Builder<Self> {
+    ctor public GenericSchedule.Builder();
+    method public final Self addByDay(androidx.appactions.builtintypes.properties.ByDay byDay);
+    method public final Self addByDays(Iterable<androidx.appactions.builtintypes.properties.ByDay> values);
+    method public final Self addByMonth(long integer);
+    method public final Self addByMonthDay(long integer);
+    method public final Self addByMonthDays(Iterable<java.lang.Long> values);
+    method public final Self addByMonthWeek(long integer);
+    method public final Self addByMonthWeeks(Iterable<java.lang.Long> values);
+    method public final Self addByMonths(Iterable<java.lang.Long> values);
+    method public final Built build();
+    method protected abstract Built buildFromSchedule(androidx.appactions.builtintypes.types.Schedule schedule);
+    method public final Self clearByDays();
+    method public final Self clearByMonthDays();
+    method public final Self clearByMonthWeeks();
+    method public final Self clearByMonths();
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
+    method public final Self setEndDate(androidx.appactions.builtintypes.properties.EndDate? endDate);
+    method public final Self setEndTime(androidx.appactions.builtintypes.properties.EndTime? endTime);
+    method public final Self setExceptDate(androidx.appactions.builtintypes.properties.ExceptDate? exceptDate);
+    method public final Self setIdentifier(String? text);
+    method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
+    method public final Self setRepeatCount(Long? integer);
+    method public final Self setRepeatFrequency(androidx.appactions.builtintypes.properties.RepeatFrequency? repeatFrequency);
+    method public final Self setScheduleTimezone(String? text);
+    method public final Self setStartDate(androidx.appactions.builtintypes.properties.StartDate? startDate);
+    method public final Self setStartTime(androidx.appactions.builtintypes.properties.StartTime? startTime);
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract class GenericThing<Self extends androidx.appactions.builtintypes.types.GenericThing<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericThing.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Thing {
+    ctor public GenericThing(androidx.appactions.builtintypes.types.Thing thing);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
+    method public final String? getIdentifier();
+    method public final androidx.appactions.builtintypes.properties.Name? getName();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Builder toBuilder();
+    method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
+    property public final String? identifier;
+    property public final androidx.appactions.builtintypes.properties.Name? name;
+    property protected abstract String selfTypeName;
   }
 
   public abstract static class GenericThing.Builder<Self extends androidx.appactions.builtintypes.types.GenericThing.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericThing<Built, Self>> implements androidx.appactions.builtintypes.types.Thing.Builder<Self> {
@@ -128,74 +439,200 @@
     method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
     method protected abstract String getSelfTypeName();
     method public final int hashCode();
-    method public final Self setDescription(androidx.appactions.builtintypes.properties.Description? description);
     method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
     method public final Self setIdentifier(String? text);
     method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
-    method public final Self setTemporal(androidx.appactions.builtintypes.properties.Temporal? temporal);
     method public final String toString();
     property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
     property protected abstract String selfTypeName;
   }
 
+  public abstract class GenericTimer<Self extends androidx.appactions.builtintypes.types.GenericTimer<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericTimer.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Timer {
+    ctor public GenericTimer(androidx.appactions.builtintypes.types.Timer timer);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
+    method public final java.time.Duration? getDuration();
+    method public final String? getIdentifier();
+    method public final androidx.appactions.builtintypes.properties.Name? getName();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Builder toBuilder();
+    method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
+    property public final java.time.Duration? duration;
+    property public final String? identifier;
+    property public final androidx.appactions.builtintypes.properties.Name? name;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract static class GenericTimer.Builder<Self extends androidx.appactions.builtintypes.types.GenericTimer.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericTimer<Built, Self>> implements androidx.appactions.builtintypes.types.Timer.Builder<Self> {
+    ctor public GenericTimer.Builder();
+    method public final Built build();
+    method protected abstract Built buildFromTimer(androidx.appactions.builtintypes.types.Timer timer);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
+    method public final Self setDuration(java.time.Duration? duration);
+    method public final Self setIdentifier(String? text);
+    method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property protected abstract String selfTypeName;
+  }
+
+  public interface Intangible extends androidx.appactions.builtintypes.types.Thing {
+    method public default static androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder();
+    method public androidx.appactions.builtintypes.types.Intangible.Builder<?> toBuilder();
+    field public static final androidx.appactions.builtintypes.types.Intangible.Companion Companion;
+  }
+
+  public static interface Intangible.Builder<Self extends androidx.appactions.builtintypes.types.Intangible.Builder<Self>> extends androidx.appactions.builtintypes.types.Thing.Builder<Self> {
+    method public androidx.appactions.builtintypes.types.Intangible build();
+  }
+
+  public static final class Intangible.Companion {
+    method public androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder();
+  }
+
+  public interface Person extends androidx.appactions.builtintypes.types.Thing {
+    method public default static androidx.appactions.builtintypes.types.Person.Builder<?> Builder();
+    method public String? getEmail();
+    method public androidx.appactions.builtintypes.types.Person.Builder<?> toBuilder();
+    property public abstract String? email;
+    field public static final androidx.appactions.builtintypes.types.Person.Companion Companion;
+  }
+
+  public static interface Person.Builder<Self extends androidx.appactions.builtintypes.types.Person.Builder<Self>> extends androidx.appactions.builtintypes.types.Thing.Builder<Self> {
+    method public androidx.appactions.builtintypes.types.Person build();
+    method public Self setEmail(String? text);
+  }
+
+  public static final class Person.Companion {
+    method public androidx.appactions.builtintypes.types.Person.Builder<?> Builder();
+  }
+
+  public interface Schedule extends androidx.appactions.builtintypes.types.Intangible {
+    method public default static androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder();
+    method public java.util.List<androidx.appactions.builtintypes.properties.ByDay> getByDays();
+    method public java.util.List<java.lang.Long> getByMonthDays();
+    method public java.util.List<java.lang.Long> getByMonthWeeks();
+    method public java.util.List<java.lang.Long> getByMonths();
+    method public androidx.appactions.builtintypes.properties.EndDate? getEndDate();
+    method public androidx.appactions.builtintypes.properties.EndTime? getEndTime();
+    method public androidx.appactions.builtintypes.properties.ExceptDate? getExceptDate();
+    method public Long? getRepeatCount();
+    method public androidx.appactions.builtintypes.properties.RepeatFrequency? getRepeatFrequency();
+    method public String? getScheduleTimezone();
+    method public androidx.appactions.builtintypes.properties.StartDate? getStartDate();
+    method public androidx.appactions.builtintypes.properties.StartTime? getStartTime();
+    method public androidx.appactions.builtintypes.types.Schedule.Builder<?> toBuilder();
+    property public abstract java.util.List<androidx.appactions.builtintypes.properties.ByDay> byDays;
+    property public abstract java.util.List<java.lang.Long> byMonthDays;
+    property public abstract java.util.List<java.lang.Long> byMonthWeeks;
+    property public abstract java.util.List<java.lang.Long> byMonths;
+    property public abstract androidx.appactions.builtintypes.properties.EndDate? endDate;
+    property public abstract androidx.appactions.builtintypes.properties.EndTime? endTime;
+    property public abstract androidx.appactions.builtintypes.properties.ExceptDate? exceptDate;
+    property public abstract Long? repeatCount;
+    property public abstract androidx.appactions.builtintypes.properties.RepeatFrequency? repeatFrequency;
+    property public abstract String? scheduleTimezone;
+    property public abstract androidx.appactions.builtintypes.properties.StartDate? startDate;
+    property public abstract androidx.appactions.builtintypes.properties.StartTime? startTime;
+    field public static final androidx.appactions.builtintypes.types.Schedule.Companion Companion;
+  }
+
+  public static interface Schedule.Builder<Self extends androidx.appactions.builtintypes.types.Schedule.Builder<Self>> extends androidx.appactions.builtintypes.types.Intangible.Builder<Self> {
+    method public Self addByDay(androidx.appactions.builtintypes.properties.ByDay byDay);
+    method public default Self addByDay(androidx.appactions.builtintypes.types.DayOfWeek dayOfWeek);
+    method public default Self addByDay(String text);
+    method public Self addByDays(Iterable<androidx.appactions.builtintypes.properties.ByDay> values);
+    method public Self addByMonth(long integer);
+    method public Self addByMonthDay(long integer);
+    method public Self addByMonthDays(Iterable<java.lang.Long> values);
+    method public Self addByMonthWeek(long integer);
+    method public Self addByMonthWeeks(Iterable<java.lang.Long> values);
+    method public Self addByMonths(Iterable<java.lang.Long> values);
+    method public androidx.appactions.builtintypes.types.Schedule build();
+    method public Self clearByDays();
+    method public Self clearByMonthDays();
+    method public Self clearByMonthWeeks();
+    method public Self clearByMonths();
+    method public Self setEndDate(androidx.appactions.builtintypes.properties.EndDate? endDate);
+    method public default Self setEndDate(java.time.LocalDate date);
+    method public default Self setEndDate(java.time.LocalDateTime localDateTime);
+    method public default Self setEndDate(java.time.ZonedDateTime zonedDateTime);
+    method public Self setEndTime(androidx.appactions.builtintypes.properties.EndTime? endTime);
+    method public default Self setEndTime(java.time.LocalDateTime localDateTime);
+    method public default Self setEndTime(java.time.LocalTime time);
+    method public default Self setEndTime(java.time.ZonedDateTime zonedDateTime);
+    method public Self setExceptDate(androidx.appactions.builtintypes.properties.ExceptDate? exceptDate);
+    method public default Self setExceptDate(java.time.LocalDate date);
+    method public default Self setExceptDate(java.time.LocalDateTime localDateTime);
+    method public default Self setExceptDate(java.time.ZonedDateTime zonedDateTime);
+    method public Self setRepeatCount(Long? integer);
+    method public Self setRepeatFrequency(androidx.appactions.builtintypes.properties.RepeatFrequency? repeatFrequency);
+    method public default Self setRepeatFrequency(String text);
+    method public default Self setRepeatFrequency(java.time.Duration duration);
+    method public Self setScheduleTimezone(String? text);
+    method public Self setStartDate(androidx.appactions.builtintypes.properties.StartDate? startDate);
+    method public default Self setStartDate(java.time.LocalDate date);
+    method public default Self setStartDate(java.time.LocalDateTime localDateTime);
+    method public default Self setStartDate(java.time.ZonedDateTime zonedDateTime);
+    method public Self setStartTime(androidx.appactions.builtintypes.properties.StartTime? startTime);
+    method public default Self setStartTime(java.time.LocalDateTime localDateTime);
+    method public default Self setStartTime(java.time.LocalTime time);
+    method public default Self setStartTime(java.time.ZonedDateTime zonedDateTime);
+  }
+
+  public static final class Schedule.Companion {
+    method public androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder();
+  }
+
   public interface Thing {
     method public default static androidx.appactions.builtintypes.types.Thing.Builder<?> Builder();
-    method public androidx.appactions.builtintypes.properties.Description? getDescription();
     method public androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
     method public String? getIdentifier();
     method public androidx.appactions.builtintypes.properties.Name? getName();
-    method public androidx.appactions.builtintypes.properties.Temporal? getTemporal();
     method public androidx.appactions.builtintypes.types.Thing.Builder<?> toBuilder();
-    property public abstract androidx.appactions.builtintypes.properties.Description? description;
     property public abstract androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
     property public abstract String? identifier;
     property public abstract androidx.appactions.builtintypes.properties.Name? name;
-    property public abstract androidx.appactions.builtintypes.properties.Temporal? temporal;
     field public static final androidx.appactions.builtintypes.types.Thing.Companion Companion;
   }
 
   public static interface Thing.Builder<Self extends androidx.appactions.builtintypes.types.Thing.Builder<Self>> {
     method public androidx.appactions.builtintypes.types.Thing build();
-    method public Self setDescription(androidx.appactions.builtintypes.properties.Description? description);
-    method public default Self setDescription(String text);
     method public Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
-    method public default Self setDisambiguatingDescription(androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue canonicalValue);
     method public default Self setDisambiguatingDescription(String text);
     method public Self setIdentifier(String? text);
     method public Self setName(androidx.appactions.builtintypes.properties.Name? name);
     method public default Self setName(String text);
-    method public Self setTemporal(androidx.appactions.builtintypes.properties.Temporal? temporal);
-    method public default Self setTemporal(String text);
-    method public default Self setTemporal(java.time.LocalDateTime localDateTime);
-    method public default Self setTemporal(java.time.ZonedDateTime zonedDateTime);
   }
 
   public static final class Thing.Companion {
     method public androidx.appactions.builtintypes.types.Thing.Builder<?> Builder();
   }
 
-  public static final class Thing.DisambiguatingDescriptionValue extends androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue {
-    method public String getTextValue();
-    property public String textValue;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue ALBUM;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue AUDIOBOOK;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue.Companion Companion;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue EPISODE;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue MOVIE;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue MUSIC;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue OTHER;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue PHOTOGRAPH;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue PODCAST;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue SONG;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue SOUNDTRACK;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue TELEVISION_CHANNEL;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue TELEVISION_SHOW;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue TRAILER;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue VIDEO;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue VIDEO_GAME;
+  public interface Timer extends androidx.appactions.builtintypes.types.Thing {
+    method public default static androidx.appactions.builtintypes.types.Timer.Builder<?> Builder();
+    method public java.time.Duration? getDuration();
+    method public androidx.appactions.builtintypes.types.Timer.Builder<?> toBuilder();
+    property public abstract java.time.Duration? duration;
+    field public static final androidx.appactions.builtintypes.types.Timer.Companion Companion;
   }
 
-  public static final class Thing.DisambiguatingDescriptionValue.Companion {
+  public static interface Timer.Builder<Self extends androidx.appactions.builtintypes.types.Timer.Builder<Self>> extends androidx.appactions.builtintypes.types.Thing.Builder<Self> {
+    method public androidx.appactions.builtintypes.types.Timer build();
+    method public Self setDuration(java.time.Duration? duration);
+  }
+
+  public static final class Timer.Companion {
+    method public androidx.appactions.builtintypes.types.Timer.Builder<?> Builder();
   }
 
 }
diff --git a/appactions/builtintypes/builtintypes-core/api/restricted_current.txt b/appactions/builtintypes/builtintypes-core/api/restricted_current.txt
index 198ed2d..4033c72 100644
--- a/appactions/builtintypes/builtintypes-core/api/restricted_current.txt
+++ b/appactions/builtintypes/builtintypes-core/api/restricted_current.txt
@@ -1,23 +1,18 @@
 // Signature format: 4.0
 package androidx.appactions.builtintypes.properties {
 
-  public final class Description {
-    ctor public Description(androidx.appactions.builtintypes.properties.Description.CanonicalValue canonicalValue);
-    ctor public Description(String text);
-    method public androidx.appactions.builtintypes.properties.Description.CanonicalValue? getAsCanonicalValue();
+  public final class ByDay {
+    ctor public ByDay(androidx.appactions.builtintypes.types.DayOfWeek dayOfWeek);
+    ctor public ByDay(String text);
+    method public androidx.appactions.builtintypes.types.DayOfWeek? getAsDayOfWeek();
     method public String? getAsText();
-    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Description.Mapper<R> mapper);
-    property public final androidx.appactions.builtintypes.properties.Description.CanonicalValue? asCanonicalValue;
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.ByDay.Mapper<R> mapper);
+    property public final androidx.appactions.builtintypes.types.DayOfWeek? asDayOfWeek;
     property public final String? asText;
   }
 
-  public abstract static class Description.CanonicalValue {
-    method public abstract String getTextValue();
-    property public abstract String textValue;
-  }
-
-  public static interface Description.Mapper<R> {
-    method public default R canonicalValue(androidx.appactions.builtintypes.properties.Description.CanonicalValue instance);
+  public static interface ByDay.Mapper<R> {
+    method public default R dayOfWeek(androidx.appactions.builtintypes.types.DayOfWeek instance);
     method public R orElse();
     method public default R text(String instance);
   }
@@ -43,53 +38,125 @@
     method public default R text(String instance);
   }
 
-  public final class Name {
-    ctor public Name(androidx.appactions.builtintypes.properties.Name.CanonicalValue canonicalValue);
-    ctor public Name(String text);
-    method public androidx.appactions.builtintypes.properties.Name.CanonicalValue? getAsCanonicalValue();
-    method public String? getAsText();
-    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Name.Mapper<R> mapper);
-    property public final androidx.appactions.builtintypes.properties.Name.CanonicalValue? asCanonicalValue;
-    property public final String? asText;
-  }
-
-  public abstract static class Name.CanonicalValue {
-    method public abstract String getTextValue();
-    property public abstract String textValue;
-  }
-
-  public static interface Name.Mapper<R> {
-    method public default R canonicalValue(androidx.appactions.builtintypes.properties.Name.CanonicalValue instance);
-    method public R orElse();
-    method public default R text(String instance);
-  }
-
-  public final class Temporal {
-    ctor public Temporal(androidx.appactions.builtintypes.properties.Temporal.CanonicalValue canonicalValue);
-    ctor public Temporal(String text);
-    ctor public Temporal(java.time.LocalDateTime localDateTime);
-    ctor public Temporal(java.time.ZonedDateTime zonedDateTime);
-    method public androidx.appactions.builtintypes.properties.Temporal.CanonicalValue? getAsCanonicalValue();
+  public final class EndDate {
+    ctor public EndDate(java.time.LocalDate date);
+    ctor public EndDate(java.time.LocalDateTime localDateTime);
+    ctor public EndDate(java.time.ZonedDateTime zonedDateTime);
+    method public java.time.LocalDate? getAsDate();
     method public java.time.LocalDateTime? getAsLocalDateTime();
-    method public String? getAsText();
     method public java.time.ZonedDateTime? getAsZonedDateTime();
-    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Temporal.Mapper<R> mapper);
-    property public final androidx.appactions.builtintypes.properties.Temporal.CanonicalValue? asCanonicalValue;
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.EndDate.Mapper<R> mapper);
+    property public final java.time.LocalDate? asDate;
     property public final java.time.LocalDateTime? asLocalDateTime;
-    property public final String? asText;
     property public final java.time.ZonedDateTime? asZonedDateTime;
   }
 
-  public abstract static class Temporal.CanonicalValue {
-    method public abstract String getTextValue();
-    property public abstract String textValue;
-  }
-
-  public static interface Temporal.Mapper<R> {
-    method public default R canonicalValue(androidx.appactions.builtintypes.properties.Temporal.CanonicalValue instance);
+  public static interface EndDate.Mapper<R> {
+    method public default R date(java.time.LocalDate instance);
     method public default R localDateTime(java.time.LocalDateTime instance);
     method public R orElse();
+    method public default R zonedDateTime(java.time.ZonedDateTime instance);
+  }
+
+  public final class EndTime {
+    ctor public EndTime(java.time.LocalDateTime localDateTime);
+    ctor public EndTime(java.time.LocalTime time);
+    ctor public EndTime(java.time.ZonedDateTime zonedDateTime);
+    method public java.time.LocalDateTime? getAsLocalDateTime();
+    method public java.time.LocalTime? getAsTime();
+    method public java.time.ZonedDateTime? getAsZonedDateTime();
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.EndTime.Mapper<R> mapper);
+    property public final java.time.LocalDateTime? asLocalDateTime;
+    property public final java.time.LocalTime? asTime;
+    property public final java.time.ZonedDateTime? asZonedDateTime;
+  }
+
+  public static interface EndTime.Mapper<R> {
+    method public default R localDateTime(java.time.LocalDateTime instance);
+    method public R orElse();
+    method public default R time(java.time.LocalTime instance);
+    method public default R zonedDateTime(java.time.ZonedDateTime instance);
+  }
+
+  public final class ExceptDate {
+    ctor public ExceptDate(java.time.LocalDate date);
+    ctor public ExceptDate(java.time.LocalDateTime localDateTime);
+    ctor public ExceptDate(java.time.ZonedDateTime zonedDateTime);
+    method public java.time.LocalDate? getAsDate();
+    method public java.time.LocalDateTime? getAsLocalDateTime();
+    method public java.time.ZonedDateTime? getAsZonedDateTime();
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.ExceptDate.Mapper<R> mapper);
+    property public final java.time.LocalDate? asDate;
+    property public final java.time.LocalDateTime? asLocalDateTime;
+    property public final java.time.ZonedDateTime? asZonedDateTime;
+  }
+
+  public static interface ExceptDate.Mapper<R> {
+    method public default R date(java.time.LocalDate instance);
+    method public default R localDateTime(java.time.LocalDateTime instance);
+    method public R orElse();
+    method public default R zonedDateTime(java.time.ZonedDateTime instance);
+  }
+
+  public final class Name {
+    ctor public Name(String text);
+    method public String? getAsText();
+    property public final String? asText;
+  }
+
+  public final class RepeatFrequency {
+    ctor public RepeatFrequency(String text);
+    ctor public RepeatFrequency(java.time.Duration duration);
+    method public java.time.Duration? getAsDuration();
+    method public String? getAsText();
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.RepeatFrequency.Mapper<R> mapper);
+    property public final java.time.Duration? asDuration;
+    property public final String? asText;
+  }
+
+  public static interface RepeatFrequency.Mapper<R> {
+    method public default R duration(java.time.Duration instance);
+    method public R orElse();
     method public default R text(String instance);
+  }
+
+  public final class StartDate {
+    ctor public StartDate(java.time.LocalDate date);
+    ctor public StartDate(java.time.LocalDateTime localDateTime);
+    ctor public StartDate(java.time.ZonedDateTime zonedDateTime);
+    method public java.time.LocalDate? getAsDate();
+    method public java.time.LocalDateTime? getAsLocalDateTime();
+    method public java.time.ZonedDateTime? getAsZonedDateTime();
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.StartDate.Mapper<R> mapper);
+    property public final java.time.LocalDate? asDate;
+    property public final java.time.LocalDateTime? asLocalDateTime;
+    property public final java.time.ZonedDateTime? asZonedDateTime;
+  }
+
+  public static interface StartDate.Mapper<R> {
+    method public default R date(java.time.LocalDate instance);
+    method public default R localDateTime(java.time.LocalDateTime instance);
+    method public R orElse();
+    method public default R zonedDateTime(java.time.ZonedDateTime instance);
+  }
+
+  public final class StartTime {
+    ctor public StartTime(java.time.LocalDateTime localDateTime);
+    ctor public StartTime(java.time.LocalTime time);
+    ctor public StartTime(java.time.ZonedDateTime zonedDateTime);
+    method public java.time.LocalDateTime? getAsLocalDateTime();
+    method public java.time.LocalTime? getAsTime();
+    method public java.time.ZonedDateTime? getAsZonedDateTime();
+    method public <R> R mapWhen(androidx.appactions.builtintypes.properties.StartTime.Mapper<R> mapper);
+    property public final java.time.LocalDateTime? asLocalDateTime;
+    property public final java.time.LocalTime? asTime;
+    property public final java.time.ZonedDateTime? asZonedDateTime;
+  }
+
+  public static interface StartTime.Mapper<R> {
+    method public default R localDateTime(java.time.LocalDateTime instance);
+    method public R orElse();
+    method public default R time(java.time.LocalTime instance);
     method public default R zonedDateTime(java.time.ZonedDateTime instance);
   }
 
@@ -97,27 +164,271 @@
 
 package androidx.appactions.builtintypes.types {
 
-  public abstract class GenericThing<Self extends androidx.appactions.builtintypes.types.GenericThing<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericThing.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Thing {
-    ctor public GenericThing(androidx.appactions.builtintypes.types.Thing thing);
+  public interface Alarm extends androidx.appactions.builtintypes.types.Thing {
+    method public default static androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder();
+    method public androidx.appactions.builtintypes.types.Schedule? getAlarmSchedule();
+    method public androidx.appactions.builtintypes.types.Alarm.Builder<?> toBuilder();
+    property public abstract androidx.appactions.builtintypes.types.Schedule? alarmSchedule;
+    field public static final androidx.appactions.builtintypes.types.Alarm.Companion Companion;
+  }
+
+  public static interface Alarm.Builder<Self extends androidx.appactions.builtintypes.types.Alarm.Builder<Self>> extends androidx.appactions.builtintypes.types.Thing.Builder<Self> {
+    method public androidx.appactions.builtintypes.types.Alarm build();
+    method public Self setAlarmSchedule(androidx.appactions.builtintypes.types.Schedule? schedule);
+    method public default Self setDisambiguatingDescription(androidx.appactions.builtintypes.types.Alarm.DisambiguatingDescriptionValue canonicalValue);
+  }
+
+  public static final class Alarm.Companion {
+    method public androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder();
+  }
+
+  public static final class Alarm.DisambiguatingDescriptionValue extends androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue {
+    method public String getTextValue();
+    property public String textValue;
+    field public static final androidx.appactions.builtintypes.types.Alarm.DisambiguatingDescriptionValue.Companion Companion;
+    field public static final androidx.appactions.builtintypes.types.Alarm.DisambiguatingDescriptionValue FAMILY_BELL;
+  }
+
+  public static final class Alarm.DisambiguatingDescriptionValue.Companion {
+  }
+
+  public final class DayOfWeek {
+    method public String getCanonicalUrl();
+    method public <R> R mapWhen(androidx.appactions.builtintypes.types.DayOfWeek.Mapper<R> mapper);
+    property public final String canonicalUrl;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek.Companion Companion;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek FRIDAY;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek MONDAY;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek PUBLIC_HOLIDAYS;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek SATURDAY;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek SUNDAY;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek THURSDAY;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek TUESDAY;
+    field public static final androidx.appactions.builtintypes.types.DayOfWeek WEDNESDAY;
+  }
+
+  public static final class DayOfWeek.Companion {
+  }
+
+  public static interface DayOfWeek.Mapper<R> {
+    method public default R friday();
+    method public default R monday();
+    method public R orElse();
+    method public default R publicHolidays();
+    method public default R saturday();
+    method public default R sunday();
+    method public default R thursday();
+    method public default R tuesday();
+    method public default R wednesday();
+  }
+
+  public abstract class GenericAlarm<Self extends androidx.appactions.builtintypes.types.GenericAlarm<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericAlarm.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Alarm {
+    ctor public GenericAlarm(androidx.appactions.builtintypes.types.Alarm alarm);
     method public final boolean equals(Object? other);
     method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
-    method public final androidx.appactions.builtintypes.properties.Description? getDescription();
+    method public final androidx.appactions.builtintypes.types.Schedule? getAlarmSchedule();
     method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
     method public final String? getIdentifier();
     method public final androidx.appactions.builtintypes.properties.Name? getName();
     method protected abstract String getSelfTypeName();
-    method public final androidx.appactions.builtintypes.properties.Temporal? getTemporal();
     method public final int hashCode();
     method public final Builder toBuilder();
     method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
     method public final String toString();
     property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
-    property public final androidx.appactions.builtintypes.properties.Description? description;
+    property public final androidx.appactions.builtintypes.types.Schedule? alarmSchedule;
     property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
     property public final String? identifier;
     property public final androidx.appactions.builtintypes.properties.Name? name;
     property protected abstract String selfTypeName;
-    property public final androidx.appactions.builtintypes.properties.Temporal? temporal;
+  }
+
+  public abstract static class GenericAlarm.Builder<Self extends androidx.appactions.builtintypes.types.GenericAlarm.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericAlarm<Built, Self>> implements androidx.appactions.builtintypes.types.Alarm.Builder<Self> {
+    ctor public GenericAlarm.Builder();
+    method public final Built build();
+    method protected abstract Built buildFromAlarm(androidx.appactions.builtintypes.types.Alarm alarm);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Self setAlarmSchedule(androidx.appactions.builtintypes.types.Schedule? schedule);
+    method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
+    method public final Self setIdentifier(String? text);
+    method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract class GenericIntangible<Self extends androidx.appactions.builtintypes.types.GenericIntangible<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericIntangible.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Intangible {
+    ctor public GenericIntangible(androidx.appactions.builtintypes.types.Intangible intangible);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
+    method public final String? getIdentifier();
+    method public final androidx.appactions.builtintypes.properties.Name? getName();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Builder toBuilder();
+    method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
+    property public final String? identifier;
+    property public final androidx.appactions.builtintypes.properties.Name? name;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract static class GenericIntangible.Builder<Self extends androidx.appactions.builtintypes.types.GenericIntangible.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericIntangible<Built, Self>> implements androidx.appactions.builtintypes.types.Intangible.Builder<Self> {
+    ctor public GenericIntangible.Builder();
+    method public final Built build();
+    method protected abstract Built buildFromIntangible(androidx.appactions.builtintypes.types.Intangible intangible);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
+    method public final Self setIdentifier(String? text);
+    method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract class GenericPerson<Self extends androidx.appactions.builtintypes.types.GenericPerson<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericPerson.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Person {
+    ctor public GenericPerson(androidx.appactions.builtintypes.types.Person person);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
+    method public final String? getEmail();
+    method public final String? getIdentifier();
+    method public final androidx.appactions.builtintypes.properties.Name? getName();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Builder toBuilder();
+    method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
+    property public final String? email;
+    property public final String? identifier;
+    property public final androidx.appactions.builtintypes.properties.Name? name;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract static class GenericPerson.Builder<Self extends androidx.appactions.builtintypes.types.GenericPerson.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericPerson<Built, Self>> implements androidx.appactions.builtintypes.types.Person.Builder<Self> {
+    ctor public GenericPerson.Builder();
+    method public final Built build();
+    method protected abstract Built buildFromPerson(androidx.appactions.builtintypes.types.Person person);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
+    method public final Self setEmail(String? text);
+    method public final Self setIdentifier(String? text);
+    method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract class GenericSchedule<Self extends androidx.appactions.builtintypes.types.GenericSchedule<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericSchedule.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Schedule {
+    ctor public GenericSchedule(androidx.appactions.builtintypes.types.Schedule schedule);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method public final java.util.List<androidx.appactions.builtintypes.properties.ByDay> getByDays();
+    method public final java.util.List<java.lang.Long> getByMonthDays();
+    method public final java.util.List<java.lang.Long> getByMonthWeeks();
+    method public final java.util.List<java.lang.Long> getByMonths();
+    method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
+    method public final androidx.appactions.builtintypes.properties.EndDate? getEndDate();
+    method public final androidx.appactions.builtintypes.properties.EndTime? getEndTime();
+    method public final androidx.appactions.builtintypes.properties.ExceptDate? getExceptDate();
+    method public final String? getIdentifier();
+    method public final androidx.appactions.builtintypes.properties.Name? getName();
+    method public final Long? getRepeatCount();
+    method public final androidx.appactions.builtintypes.properties.RepeatFrequency? getRepeatFrequency();
+    method public final String? getScheduleTimezone();
+    method protected abstract String getSelfTypeName();
+    method public final androidx.appactions.builtintypes.properties.StartDate? getStartDate();
+    method public final androidx.appactions.builtintypes.properties.StartTime? getStartTime();
+    method public final int hashCode();
+    method public final Builder toBuilder();
+    method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property public final java.util.List<androidx.appactions.builtintypes.properties.ByDay> byDays;
+    property public final java.util.List<java.lang.Long> byMonthDays;
+    property public final java.util.List<java.lang.Long> byMonthWeeks;
+    property public final java.util.List<java.lang.Long> byMonths;
+    property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
+    property public final androidx.appactions.builtintypes.properties.EndDate? endDate;
+    property public final androidx.appactions.builtintypes.properties.EndTime? endTime;
+    property public final androidx.appactions.builtintypes.properties.ExceptDate? exceptDate;
+    property public final String? identifier;
+    property public final androidx.appactions.builtintypes.properties.Name? name;
+    property public final Long? repeatCount;
+    property public final androidx.appactions.builtintypes.properties.RepeatFrequency? repeatFrequency;
+    property public final String? scheduleTimezone;
+    property protected abstract String selfTypeName;
+    property public final androidx.appactions.builtintypes.properties.StartDate? startDate;
+    property public final androidx.appactions.builtintypes.properties.StartTime? startTime;
+  }
+
+  public abstract static class GenericSchedule.Builder<Self extends androidx.appactions.builtintypes.types.GenericSchedule.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericSchedule<Built, Self>> implements androidx.appactions.builtintypes.types.Schedule.Builder<Self> {
+    ctor public GenericSchedule.Builder();
+    method public final Self addByDay(androidx.appactions.builtintypes.properties.ByDay byDay);
+    method public final Self addByDays(Iterable<androidx.appactions.builtintypes.properties.ByDay> values);
+    method public final Self addByMonth(long integer);
+    method public final Self addByMonthDay(long integer);
+    method public final Self addByMonthDays(Iterable<java.lang.Long> values);
+    method public final Self addByMonthWeek(long integer);
+    method public final Self addByMonthWeeks(Iterable<java.lang.Long> values);
+    method public final Self addByMonths(Iterable<java.lang.Long> values);
+    method public final Built build();
+    method protected abstract Built buildFromSchedule(androidx.appactions.builtintypes.types.Schedule schedule);
+    method public final Self clearByDays();
+    method public final Self clearByMonthDays();
+    method public final Self clearByMonthWeeks();
+    method public final Self clearByMonths();
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
+    method public final Self setEndDate(androidx.appactions.builtintypes.properties.EndDate? endDate);
+    method public final Self setEndTime(androidx.appactions.builtintypes.properties.EndTime? endTime);
+    method public final Self setExceptDate(androidx.appactions.builtintypes.properties.ExceptDate? exceptDate);
+    method public final Self setIdentifier(String? text);
+    method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
+    method public final Self setRepeatCount(Long? integer);
+    method public final Self setRepeatFrequency(androidx.appactions.builtintypes.properties.RepeatFrequency? repeatFrequency);
+    method public final Self setScheduleTimezone(String? text);
+    method public final Self setStartDate(androidx.appactions.builtintypes.properties.StartDate? startDate);
+    method public final Self setStartTime(androidx.appactions.builtintypes.properties.StartTime? startTime);
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract class GenericThing<Self extends androidx.appactions.builtintypes.types.GenericThing<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericThing.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Thing {
+    ctor public GenericThing(androidx.appactions.builtintypes.types.Thing thing);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
+    method public final String? getIdentifier();
+    method public final androidx.appactions.builtintypes.properties.Name? getName();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Builder toBuilder();
+    method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
+    property public final String? identifier;
+    property public final androidx.appactions.builtintypes.properties.Name? name;
+    property protected abstract String selfTypeName;
   }
 
   public abstract static class GenericThing.Builder<Self extends androidx.appactions.builtintypes.types.GenericThing.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericThing<Built, Self>> implements androidx.appactions.builtintypes.types.Thing.Builder<Self> {
@@ -128,74 +439,200 @@
     method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
     method protected abstract String getSelfTypeName();
     method public final int hashCode();
-    method public final Self setDescription(androidx.appactions.builtintypes.properties.Description? description);
     method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
     method public final Self setIdentifier(String? text);
     method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
-    method public final Self setTemporal(androidx.appactions.builtintypes.properties.Temporal? temporal);
     method public final String toString();
     property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
     property protected abstract String selfTypeName;
   }
 
+  public abstract class GenericTimer<Self extends androidx.appactions.builtintypes.types.GenericTimer<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericTimer.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Timer {
+    ctor public GenericTimer(androidx.appactions.builtintypes.types.Timer timer);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
+    method public final java.time.Duration? getDuration();
+    method public final String? getIdentifier();
+    method public final androidx.appactions.builtintypes.properties.Name? getName();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Builder toBuilder();
+    method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
+    property public final java.time.Duration? duration;
+    property public final String? identifier;
+    property public final androidx.appactions.builtintypes.properties.Name? name;
+    property protected abstract String selfTypeName;
+  }
+
+  public abstract static class GenericTimer.Builder<Self extends androidx.appactions.builtintypes.types.GenericTimer.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericTimer<Built, Self>> implements androidx.appactions.builtintypes.types.Timer.Builder<Self> {
+    ctor public GenericTimer.Builder();
+    method public final Built build();
+    method protected abstract Built buildFromTimer(androidx.appactions.builtintypes.types.Timer timer);
+    method public final boolean equals(Object? other);
+    method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
+    method protected abstract String getSelfTypeName();
+    method public final int hashCode();
+    method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
+    method public final Self setDuration(java.time.Duration? duration);
+    method public final Self setIdentifier(String? text);
+    method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
+    method public final String toString();
+    property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
+    property protected abstract String selfTypeName;
+  }
+
+  public interface Intangible extends androidx.appactions.builtintypes.types.Thing {
+    method public default static androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder();
+    method public androidx.appactions.builtintypes.types.Intangible.Builder<?> toBuilder();
+    field public static final androidx.appactions.builtintypes.types.Intangible.Companion Companion;
+  }
+
+  public static interface Intangible.Builder<Self extends androidx.appactions.builtintypes.types.Intangible.Builder<Self>> extends androidx.appactions.builtintypes.types.Thing.Builder<Self> {
+    method public androidx.appactions.builtintypes.types.Intangible build();
+  }
+
+  public static final class Intangible.Companion {
+    method public androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder();
+  }
+
+  public interface Person extends androidx.appactions.builtintypes.types.Thing {
+    method public default static androidx.appactions.builtintypes.types.Person.Builder<?> Builder();
+    method public String? getEmail();
+    method public androidx.appactions.builtintypes.types.Person.Builder<?> toBuilder();
+    property public abstract String? email;
+    field public static final androidx.appactions.builtintypes.types.Person.Companion Companion;
+  }
+
+  public static interface Person.Builder<Self extends androidx.appactions.builtintypes.types.Person.Builder<Self>> extends androidx.appactions.builtintypes.types.Thing.Builder<Self> {
+    method public androidx.appactions.builtintypes.types.Person build();
+    method public Self setEmail(String? text);
+  }
+
+  public static final class Person.Companion {
+    method public androidx.appactions.builtintypes.types.Person.Builder<?> Builder();
+  }
+
+  public interface Schedule extends androidx.appactions.builtintypes.types.Intangible {
+    method public default static androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder();
+    method public java.util.List<androidx.appactions.builtintypes.properties.ByDay> getByDays();
+    method public java.util.List<java.lang.Long> getByMonthDays();
+    method public java.util.List<java.lang.Long> getByMonthWeeks();
+    method public java.util.List<java.lang.Long> getByMonths();
+    method public androidx.appactions.builtintypes.properties.EndDate? getEndDate();
+    method public androidx.appactions.builtintypes.properties.EndTime? getEndTime();
+    method public androidx.appactions.builtintypes.properties.ExceptDate? getExceptDate();
+    method public Long? getRepeatCount();
+    method public androidx.appactions.builtintypes.properties.RepeatFrequency? getRepeatFrequency();
+    method public String? getScheduleTimezone();
+    method public androidx.appactions.builtintypes.properties.StartDate? getStartDate();
+    method public androidx.appactions.builtintypes.properties.StartTime? getStartTime();
+    method public androidx.appactions.builtintypes.types.Schedule.Builder<?> toBuilder();
+    property public abstract java.util.List<androidx.appactions.builtintypes.properties.ByDay> byDays;
+    property public abstract java.util.List<java.lang.Long> byMonthDays;
+    property public abstract java.util.List<java.lang.Long> byMonthWeeks;
+    property public abstract java.util.List<java.lang.Long> byMonths;
+    property public abstract androidx.appactions.builtintypes.properties.EndDate? endDate;
+    property public abstract androidx.appactions.builtintypes.properties.EndTime? endTime;
+    property public abstract androidx.appactions.builtintypes.properties.ExceptDate? exceptDate;
+    property public abstract Long? repeatCount;
+    property public abstract androidx.appactions.builtintypes.properties.RepeatFrequency? repeatFrequency;
+    property public abstract String? scheduleTimezone;
+    property public abstract androidx.appactions.builtintypes.properties.StartDate? startDate;
+    property public abstract androidx.appactions.builtintypes.properties.StartTime? startTime;
+    field public static final androidx.appactions.builtintypes.types.Schedule.Companion Companion;
+  }
+
+  public static interface Schedule.Builder<Self extends androidx.appactions.builtintypes.types.Schedule.Builder<Self>> extends androidx.appactions.builtintypes.types.Intangible.Builder<Self> {
+    method public Self addByDay(androidx.appactions.builtintypes.properties.ByDay byDay);
+    method public default Self addByDay(androidx.appactions.builtintypes.types.DayOfWeek dayOfWeek);
+    method public default Self addByDay(String text);
+    method public Self addByDays(Iterable<androidx.appactions.builtintypes.properties.ByDay> values);
+    method public Self addByMonth(long integer);
+    method public Self addByMonthDay(long integer);
+    method public Self addByMonthDays(Iterable<java.lang.Long> values);
+    method public Self addByMonthWeek(long integer);
+    method public Self addByMonthWeeks(Iterable<java.lang.Long> values);
+    method public Self addByMonths(Iterable<java.lang.Long> values);
+    method public androidx.appactions.builtintypes.types.Schedule build();
+    method public Self clearByDays();
+    method public Self clearByMonthDays();
+    method public Self clearByMonthWeeks();
+    method public Self clearByMonths();
+    method public Self setEndDate(androidx.appactions.builtintypes.properties.EndDate? endDate);
+    method public default Self setEndDate(java.time.LocalDate date);
+    method public default Self setEndDate(java.time.LocalDateTime localDateTime);
+    method public default Self setEndDate(java.time.ZonedDateTime zonedDateTime);
+    method public Self setEndTime(androidx.appactions.builtintypes.properties.EndTime? endTime);
+    method public default Self setEndTime(java.time.LocalDateTime localDateTime);
+    method public default Self setEndTime(java.time.LocalTime time);
+    method public default Self setEndTime(java.time.ZonedDateTime zonedDateTime);
+    method public Self setExceptDate(androidx.appactions.builtintypes.properties.ExceptDate? exceptDate);
+    method public default Self setExceptDate(java.time.LocalDate date);
+    method public default Self setExceptDate(java.time.LocalDateTime localDateTime);
+    method public default Self setExceptDate(java.time.ZonedDateTime zonedDateTime);
+    method public Self setRepeatCount(Long? integer);
+    method public Self setRepeatFrequency(androidx.appactions.builtintypes.properties.RepeatFrequency? repeatFrequency);
+    method public default Self setRepeatFrequency(String text);
+    method public default Self setRepeatFrequency(java.time.Duration duration);
+    method public Self setScheduleTimezone(String? text);
+    method public Self setStartDate(androidx.appactions.builtintypes.properties.StartDate? startDate);
+    method public default Self setStartDate(java.time.LocalDate date);
+    method public default Self setStartDate(java.time.LocalDateTime localDateTime);
+    method public default Self setStartDate(java.time.ZonedDateTime zonedDateTime);
+    method public Self setStartTime(androidx.appactions.builtintypes.properties.StartTime? startTime);
+    method public default Self setStartTime(java.time.LocalDateTime localDateTime);
+    method public default Self setStartTime(java.time.LocalTime time);
+    method public default Self setStartTime(java.time.ZonedDateTime zonedDateTime);
+  }
+
+  public static final class Schedule.Companion {
+    method public androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder();
+  }
+
   public interface Thing {
     method public default static androidx.appactions.builtintypes.types.Thing.Builder<?> Builder();
-    method public androidx.appactions.builtintypes.properties.Description? getDescription();
     method public androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
     method public String? getIdentifier();
     method public androidx.appactions.builtintypes.properties.Name? getName();
-    method public androidx.appactions.builtintypes.properties.Temporal? getTemporal();
     method public androidx.appactions.builtintypes.types.Thing.Builder<?> toBuilder();
-    property public abstract androidx.appactions.builtintypes.properties.Description? description;
     property public abstract androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
     property public abstract String? identifier;
     property public abstract androidx.appactions.builtintypes.properties.Name? name;
-    property public abstract androidx.appactions.builtintypes.properties.Temporal? temporal;
     field public static final androidx.appactions.builtintypes.types.Thing.Companion Companion;
   }
 
   public static interface Thing.Builder<Self extends androidx.appactions.builtintypes.types.Thing.Builder<Self>> {
     method public androidx.appactions.builtintypes.types.Thing build();
-    method public Self setDescription(androidx.appactions.builtintypes.properties.Description? description);
-    method public default Self setDescription(String text);
     method public Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
-    method public default Self setDisambiguatingDescription(androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue canonicalValue);
     method public default Self setDisambiguatingDescription(String text);
     method public Self setIdentifier(String? text);
     method public Self setName(androidx.appactions.builtintypes.properties.Name? name);
     method public default Self setName(String text);
-    method public Self setTemporal(androidx.appactions.builtintypes.properties.Temporal? temporal);
-    method public default Self setTemporal(String text);
-    method public default Self setTemporal(java.time.LocalDateTime localDateTime);
-    method public default Self setTemporal(java.time.ZonedDateTime zonedDateTime);
   }
 
   public static final class Thing.Companion {
     method public androidx.appactions.builtintypes.types.Thing.Builder<?> Builder();
   }
 
-  public static final class Thing.DisambiguatingDescriptionValue extends androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue {
-    method public String getTextValue();
-    property public String textValue;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue ALBUM;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue AUDIOBOOK;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue.Companion Companion;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue EPISODE;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue MOVIE;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue MUSIC;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue OTHER;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue PHOTOGRAPH;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue PODCAST;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue SONG;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue SOUNDTRACK;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue TELEVISION_CHANNEL;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue TELEVISION_SHOW;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue TRAILER;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue VIDEO;
-    field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue VIDEO_GAME;
+  public interface Timer extends androidx.appactions.builtintypes.types.Thing {
+    method public default static androidx.appactions.builtintypes.types.Timer.Builder<?> Builder();
+    method public java.time.Duration? getDuration();
+    method public androidx.appactions.builtintypes.types.Timer.Builder<?> toBuilder();
+    property public abstract java.time.Duration? duration;
+    field public static final androidx.appactions.builtintypes.types.Timer.Companion Companion;
   }
 
-  public static final class Thing.DisambiguatingDescriptionValue.Companion {
+  public static interface Timer.Builder<Self extends androidx.appactions.builtintypes.types.Timer.Builder<Self>> extends androidx.appactions.builtintypes.types.Thing.Builder<Self> {
+    method public androidx.appactions.builtintypes.types.Timer build();
+    method public Self setDuration(java.time.Duration? duration);
+  }
+
+  public static final class Timer.Companion {
+    method public androidx.appactions.builtintypes.types.Timer.Builder<?> Builder();
   }
 
 }
diff --git a/appactions/builtintypes/builtintypes-core/build.gradle b/appactions/builtintypes/builtintypes-core/build.gradle
index 828e4de..fd57aad 100644
--- a/appactions/builtintypes/builtintypes-core/build.gradle
+++ b/appactions/builtintypes/builtintypes-core/build.gradle
@@ -34,6 +34,9 @@
 
 android {
     namespace "androidx.appactions.builtintypes.core"
+    defaultConfig {
+        minSdkVersion 26
+    }
 }
 
 tasks.withType(KotlinCompile).configureEach {
diff --git a/appactions/builtintypes/builtintypes-core/samples/build.gradle b/appactions/builtintypes/builtintypes-core/samples/build.gradle
index 541472a..871e254 100644
--- a/appactions/builtintypes/builtintypes-core/samples/build.gradle
+++ b/appactions/builtintypes/builtintypes-core/samples/build.gradle
@@ -31,6 +31,9 @@
 
 android {
     namespace "androidx.appactions.builtintypes.core.samples"
+    defaultConfig {
+        minSdkVersion 26
+    }
 }
 
 androidx {
diff --git a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/NameSamples.kt b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/ByDaySamples.kt
similarity index 72%
rename from appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/NameSamples.kt
rename to appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/ByDaySamples.kt
index e61c597..3c5a4de 100644
--- a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/NameSamples.kt
+++ b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/ByDaySamples.kt
@@ -14,18 +14,19 @@
 package androidx.appactions.builtintypes.samples.properties
 
 import androidx.`annotation`.Sampled
-import androidx.appactions.builtintypes.properties.Name
+import androidx.appactions.builtintypes.properties.ByDay
+import androidx.appactions.builtintypes.types.DayOfWeek
 import kotlin.String
 
 @Sampled
-public fun nameMapWhenUsage(name: Name) =
-  name.mapWhen(
-    object : Name.Mapper<String> {
+public fun byDayMapWhenUsage(byDay: ByDay) =
+  byDay.mapWhen(
+    object : ByDay.Mapper<String> {
       public override fun text(instance: String): String = """Got String: $instance"""
 
-      public override fun canonicalValue(instance: Name.CanonicalValue): String =
-        """Got a canonical value for Name: $instance"""
+      public override fun dayOfWeek(instance: DayOfWeek): String =
+        """Got enum DayOfWeek: $instance"""
 
-      public override fun orElse(): String = """Got some unrecognized variant: $name"""
+      public override fun orElse(): String = """Got some unrecognized variant: $byDay"""
     }
   )
diff --git a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/EndDateSamples.kt
similarity index 72%
copy from appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt
copy to appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/EndDateSamples.kt
index 609f9de..51f745e 100644
--- a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt
+++ b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/EndDateSamples.kt
@@ -14,26 +14,24 @@
 package androidx.appactions.builtintypes.samples.properties
 
 import androidx.`annotation`.Sampled
-import androidx.appactions.builtintypes.properties.Temporal
+import androidx.appactions.builtintypes.properties.EndDate
+import java.time.LocalDate
 import java.time.LocalDateTime
 import java.time.ZonedDateTime
 import kotlin.String
 
 @Sampled
-public fun temporalMapWhenUsage(temporal: Temporal) =
-  temporal.mapWhen(
-    object : Temporal.Mapper<String> {
+public fun endDateMapWhenUsage(endDate: EndDate) =
+  endDate.mapWhen(
+    object : EndDate.Mapper<String> {
+      public override fun date(instance: LocalDate): String = """Got LocalDate: $instance"""
+
       public override fun localDateTime(instance: LocalDateTime): String =
         """Got a local DateTime: $instance"""
 
       public override fun zonedDateTime(instance: ZonedDateTime): String =
         """Got a zoned/absolute DateTime: $instance"""
 
-      public override fun text(instance: String): String = """Got String: $instance"""
-
-      public override fun canonicalValue(instance: Temporal.CanonicalValue): String =
-        """Got a canonical value for Temporal: $instance"""
-
-      public override fun orElse(): String = """Got some unrecognized variant: $temporal"""
+      public override fun orElse(): String = """Got some unrecognized variant: $endDate"""
     }
   )
diff --git a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/EndTimeSamples.kt
similarity index 72%
rename from appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt
rename to appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/EndTimeSamples.kt
index 609f9de..6094ef9 100644
--- a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt
+++ b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/EndTimeSamples.kt
@@ -14,26 +14,24 @@
 package androidx.appactions.builtintypes.samples.properties
 
 import androidx.`annotation`.Sampled
-import androidx.appactions.builtintypes.properties.Temporal
+import androidx.appactions.builtintypes.properties.EndTime
 import java.time.LocalDateTime
+import java.time.LocalTime
 import java.time.ZonedDateTime
 import kotlin.String
 
 @Sampled
-public fun temporalMapWhenUsage(temporal: Temporal) =
-  temporal.mapWhen(
-    object : Temporal.Mapper<String> {
+public fun endTimeMapWhenUsage(endTime: EndTime) =
+  endTime.mapWhen(
+    object : EndTime.Mapper<String> {
+      public override fun time(instance: LocalTime): String = """Got LocalTime: $instance"""
+
       public override fun localDateTime(instance: LocalDateTime): String =
         """Got a local DateTime: $instance"""
 
       public override fun zonedDateTime(instance: ZonedDateTime): String =
         """Got a zoned/absolute DateTime: $instance"""
 
-      public override fun text(instance: String): String = """Got String: $instance"""
-
-      public override fun canonicalValue(instance: Temporal.CanonicalValue): String =
-        """Got a canonical value for Temporal: $instance"""
-
-      public override fun orElse(): String = """Got some unrecognized variant: $temporal"""
+      public override fun orElse(): String = """Got some unrecognized variant: $endTime"""
     }
   )
diff --git a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/ExceptDateSamples.kt
similarity index 72%
copy from appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt
copy to appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/ExceptDateSamples.kt
index 609f9de..980a3df 100644
--- a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt
+++ b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/ExceptDateSamples.kt
@@ -14,26 +14,24 @@
 package androidx.appactions.builtintypes.samples.properties
 
 import androidx.`annotation`.Sampled
-import androidx.appactions.builtintypes.properties.Temporal
+import androidx.appactions.builtintypes.properties.ExceptDate
+import java.time.LocalDate
 import java.time.LocalDateTime
 import java.time.ZonedDateTime
 import kotlin.String
 
 @Sampled
-public fun temporalMapWhenUsage(temporal: Temporal) =
-  temporal.mapWhen(
-    object : Temporal.Mapper<String> {
+public fun exceptDateMapWhenUsage(exceptDate: ExceptDate) =
+  exceptDate.mapWhen(
+    object : ExceptDate.Mapper<String> {
+      public override fun date(instance: LocalDate): String = """Got LocalDate: $instance"""
+
       public override fun localDateTime(instance: LocalDateTime): String =
         """Got a local DateTime: $instance"""
 
       public override fun zonedDateTime(instance: ZonedDateTime): String =
         """Got a zoned/absolute DateTime: $instance"""
 
-      public override fun text(instance: String): String = """Got String: $instance"""
-
-      public override fun canonicalValue(instance: Temporal.CanonicalValue): String =
-        """Got a canonical value for Temporal: $instance"""
-
-      public override fun orElse(): String = """Got some unrecognized variant: $temporal"""
+      public override fun orElse(): String = """Got some unrecognized variant: $exceptDate"""
     }
   )
diff --git a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/DescriptionSamples.kt b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/RepeatFrequencySamples.kt
similarity index 70%
rename from appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/DescriptionSamples.kt
rename to appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/RepeatFrequencySamples.kt
index 5dae1e9..b01216f 100644
--- a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/DescriptionSamples.kt
+++ b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/RepeatFrequencySamples.kt
@@ -14,18 +14,18 @@
 package androidx.appactions.builtintypes.samples.properties
 
 import androidx.`annotation`.Sampled
-import androidx.appactions.builtintypes.properties.Description
+import androidx.appactions.builtintypes.properties.RepeatFrequency
+import java.time.Duration
 import kotlin.String
 
 @Sampled
-public fun descriptionMapWhenUsage(description: Description) =
-  description.mapWhen(
-    object : Description.Mapper<String> {
+public fun repeatFrequencyMapWhenUsage(repeatFrequency: RepeatFrequency) =
+  repeatFrequency.mapWhen(
+    object : RepeatFrequency.Mapper<String> {
+      public override fun duration(instance: Duration): String = """Got Duration: $instance"""
+
       public override fun text(instance: String): String = """Got String: $instance"""
 
-      public override fun canonicalValue(instance: Description.CanonicalValue): String =
-        """Got a canonical value for Description: $instance"""
-
-      public override fun orElse(): String = """Got some unrecognized variant: $description"""
+      public override fun orElse(): String = """Got some unrecognized variant: $repeatFrequency"""
     }
   )
diff --git a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/StartDateSamples.kt
similarity index 72%
copy from appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt
copy to appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/StartDateSamples.kt
index 609f9de..60772b6 100644
--- a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt
+++ b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/StartDateSamples.kt
@@ -14,26 +14,24 @@
 package androidx.appactions.builtintypes.samples.properties
 
 import androidx.`annotation`.Sampled
-import androidx.appactions.builtintypes.properties.Temporal
+import androidx.appactions.builtintypes.properties.StartDate
+import java.time.LocalDate
 import java.time.LocalDateTime
 import java.time.ZonedDateTime
 import kotlin.String
 
 @Sampled
-public fun temporalMapWhenUsage(temporal: Temporal) =
-  temporal.mapWhen(
-    object : Temporal.Mapper<String> {
+public fun startDateMapWhenUsage(startDate: StartDate) =
+  startDate.mapWhen(
+    object : StartDate.Mapper<String> {
+      public override fun date(instance: LocalDate): String = """Got LocalDate: $instance"""
+
       public override fun localDateTime(instance: LocalDateTime): String =
         """Got a local DateTime: $instance"""
 
       public override fun zonedDateTime(instance: ZonedDateTime): String =
         """Got a zoned/absolute DateTime: $instance"""
 
-      public override fun text(instance: String): String = """Got String: $instance"""
-
-      public override fun canonicalValue(instance: Temporal.CanonicalValue): String =
-        """Got a canonical value for Temporal: $instance"""
-
-      public override fun orElse(): String = """Got some unrecognized variant: $temporal"""
+      public override fun orElse(): String = """Got some unrecognized variant: $startDate"""
     }
   )
diff --git a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/StartTimeSamples.kt
similarity index 72%
copy from appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt
copy to appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/StartTimeSamples.kt
index 609f9de..b110553 100644
--- a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/TemporalSamples.kt
+++ b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/properties/StartTimeSamples.kt
@@ -14,26 +14,24 @@
 package androidx.appactions.builtintypes.samples.properties
 
 import androidx.`annotation`.Sampled
-import androidx.appactions.builtintypes.properties.Temporal
+import androidx.appactions.builtintypes.properties.StartTime
 import java.time.LocalDateTime
+import java.time.LocalTime
 import java.time.ZonedDateTime
 import kotlin.String
 
 @Sampled
-public fun temporalMapWhenUsage(temporal: Temporal) =
-  temporal.mapWhen(
-    object : Temporal.Mapper<String> {
+public fun startTimeMapWhenUsage(startTime: StartTime) =
+  startTime.mapWhen(
+    object : StartTime.Mapper<String> {
+      public override fun time(instance: LocalTime): String = """Got LocalTime: $instance"""
+
       public override fun localDateTime(instance: LocalDateTime): String =
         """Got a local DateTime: $instance"""
 
       public override fun zonedDateTime(instance: ZonedDateTime): String =
         """Got a zoned/absolute DateTime: $instance"""
 
-      public override fun text(instance: String): String = """Got String: $instance"""
-
-      public override fun canonicalValue(instance: Temporal.CanonicalValue): String =
-        """Got a canonical value for Temporal: $instance"""
-
-      public override fun orElse(): String = """Got some unrecognized variant: $temporal"""
+      public override fun orElse(): String = """Got some unrecognized variant: $startTime"""
     }
   )
diff --git a/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/types/DayOfWeekSamples.kt b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/types/DayOfWeekSamples.kt
new file mode 100644
index 0000000..633f7d4
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/samples/src/main/java/androidx/appactions/builtintypes/samples/types/DayOfWeekSamples.kt
@@ -0,0 +1,42 @@
+// Copyright 2023 The Android Open Source Project
+//
+// 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 androidx.appactions.builtintypes.samples.types
+
+import androidx.`annotation`.Sampled
+import androidx.appactions.builtintypes.types.DayOfWeek
+import kotlin.String
+
+@Sampled
+public fun dayOfWeekMapWhenUsage(dayOfWeek: DayOfWeek) =
+  dayOfWeek.mapWhen(
+    object : DayOfWeek.Mapper<String> {
+      public override fun friday(): String = "Got Friday"
+
+      public override fun monday(): String = "Got Monday"
+
+      public override fun publicHolidays(): String = "Got PublicHolidays"
+
+      public override fun saturday(): String = "Got Saturday"
+
+      public override fun sunday(): String = "Got Sunday"
+
+      public override fun thursday(): String = "Got Thursday"
+
+      public override fun tuesday(): String = "Got Tuesday"
+
+      public override fun wednesday(): String = "Got Wednesday"
+
+      public override fun orElse(): String = """Got some unrecognized DayOfWeek: $dayOfWeek"""
+    }
+  )
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Description.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/ByDay.kt
similarity index 64%
rename from appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Description.kt
rename to appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/ByDay.kt
index cb038b0..08b3cfa 100644
--- a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Description.kt
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/ByDay.kt
@@ -13,6 +13,7 @@
 // limitations under the License.
 package androidx.appactions.builtintypes.properties
 
+import androidx.appactions.builtintypes.types.DayOfWeek
 import java.util.Objects
 import kotlin.Any
 import kotlin.Boolean
@@ -22,22 +23,22 @@
 import kotlin.jvm.JvmName
 
 /**
- * A description of the item.
+ * Defines the day(s) of the week on which a recurring Event takes place.
  *
- * See http://schema.org/description for context.
+ * See http://schema.org/byDay for context.
  *
  * Holds one of:
  * * Text i.e. [String]
- * * [Description.CanonicalValue]
+ * * [DayOfWeek]
  *
  * May hold more types over time.
  */
-public class Description
+public class ByDay
 internal constructor(
   /** The [String] variant, or null if constructed using a different variant. */
   @get:JvmName("asText") public val asText: String? = null,
-  /** The [CanonicalValue] variant, or null if constructed using a different variant. */
-  @get:JvmName("asCanonicalValue") public val asCanonicalValue: CanonicalValue? = null,
+  /** The [DayOfWeek] variant, or null if constructed using a different variant. */
+  @get:JvmName("asDayOfWeek") public val asDayOfWeek: DayOfWeek? = null,
   /**
    * The AppSearch document's identifier.
    *
@@ -49,8 +50,8 @@
   /** Constructor for the [String] variant. */
   public constructor(text: String) : this(asText = text)
 
-  /** Constructor for the [CanonicalValue] variant. */
-  public constructor(canonicalValue: CanonicalValue) : this(asCanonicalValue = canonicalValue)
+  /** Constructor for the [DayOfWeek] variant. */
+  public constructor(dayOfWeek: DayOfWeek) : this(asDayOfWeek = dayOfWeek)
 
   /**
    * Maps each of the possible underlying variants to some [R].
@@ -58,13 +59,13 @@
    * A visitor can be provided to handle the possible variants. A catch-all default case must be
    * provided in case a new type is added in a future release of this library.
    *
-   * @sample [androidx.appactions.builtintypes.samples.properties.descriptionMapWhenUsage]
+   * @sample [androidx.appactions.builtintypes.samples.properties.byDayMapWhenUsage]
    */
   public fun <R> mapWhen(mapper: Mapper<R>): R =
     when {
       asText != null -> mapper.text(asText)
-      asCanonicalValue != null -> mapper.canonicalValue(asCanonicalValue)
-      else -> error("No variant present in Description")
+      asDayOfWeek != null -> mapper.dayOfWeek(asDayOfWeek)
+      else -> error("No variant present in ByDay")
     }
 
   public override fun toString(): String = toString(includeWrapperName = true)
@@ -73,42 +74,38 @@
     when {
       asText != null ->
         if (includeWrapperName) {
-          """Description($asText)"""
+          """ByDay($asText)"""
         } else {
           asText
         }
-      asCanonicalValue != null ->
+      asDayOfWeek != null ->
         if (includeWrapperName) {
-          """Description($asCanonicalValue)"""
+          """ByDay($asDayOfWeek)"""
         } else {
-          asCanonicalValue.toString()
+          asDayOfWeek.toString()
         }
-      else -> error("No variant present in Description")
+      else -> error("No variant present in ByDay")
     }
 
   public override fun equals(other: Any?): Boolean {
     if (this === other) return true
-    if (other !is Description) return false
+    if (other !is ByDay) return false
     if (asText != other.asText) return false
-    if (asCanonicalValue != other.asCanonicalValue) return false
+    if (asDayOfWeek != other.asDayOfWeek) return false
     return true
   }
 
-  public override fun hashCode(): Int = Objects.hash(asText, asCanonicalValue)
+  public override fun hashCode(): Int = Objects.hash(asText, asDayOfWeek)
 
-  /** Maps each of the possible variants of [Description] to some [R]. */
+  /** Maps each of the possible variants of [ByDay] to some [R]. */
   public interface Mapper<R> {
-    /** Returns some [R] when the [Description] holds some [String] instance. */
+    /** Returns some [R] when the [ByDay] holds some [String] instance. */
     public fun text(instance: String): R = orElse()
 
-    /** Returns some [R] when the [Description] holds some [CanonicalValue] instance. */
-    public fun canonicalValue(instance: CanonicalValue): R = orElse()
+    /** Returns some [R] when the [ByDay] holds some [DayOfWeek] instance. */
+    public fun dayOfWeek(instance: DayOfWeek): R = orElse()
 
     /** The catch-all handler that is invoked when a particular variant isn't explicitly handled. */
     public fun orElse(): R
   }
-
-  public abstract class CanonicalValue internal constructor() {
-    public abstract val textValue: String
-  }
 }
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/EndDate.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/EndDate.kt
new file mode 100644
index 0000000..785b1e6
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/EndDate.kt
@@ -0,0 +1,130 @@
+// Copyright 2023 The Android Open Source Project
+//
+// 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 androidx.appactions.builtintypes.properties
+
+import java.time.LocalDate
+import java.time.LocalDateTime
+import java.time.ZonedDateTime
+import java.util.Objects
+import kotlin.Any
+import kotlin.Boolean
+import kotlin.Int
+import kotlin.String
+import kotlin.error
+import kotlin.jvm.JvmName
+
+/**
+ * The end date and time of the item.
+ *
+ * See http://schema.org/endDate for context.
+ *
+ * Holds one of:
+ * * Date i.e. [LocalDate]
+ * * [LocalDateTime]
+ * * [ZonedDateTime]
+ *
+ * May hold more types over time.
+ */
+public class EndDate
+internal constructor(
+  /** The [LocalDate] variant, or null if constructed using a different variant. */
+  @get:JvmName("asDate") public val asDate: LocalDate? = null,
+  /** The [LocalDateTime] variant, or null if constructed using a different variant. */
+  @get:JvmName("asLocalDateTime") public val asLocalDateTime: LocalDateTime? = null,
+  /** The [ZonedDateTime] variant, or null if constructed using a different variant. */
+  @get:JvmName("asZonedDateTime") public val asZonedDateTime: ZonedDateTime? = null,
+  /**
+   * The AppSearch document's identifier.
+   *
+   * Every AppSearch document needs an identifier. Since property wrappers are only meant to be used
+   * at nested levels, this is internal and will always be an empty string.
+   */
+  internal val identifier: String = "",
+) {
+  /** Constructor for the [LocalDate] variant. */
+  public constructor(date: LocalDate) : this(asDate = date)
+
+  /** Constructor for the [LocalDateTime] variant. */
+  public constructor(localDateTime: LocalDateTime) : this(asLocalDateTime = localDateTime)
+
+  /** Constructor for the [ZonedDateTime] variant. */
+  public constructor(zonedDateTime: ZonedDateTime) : this(asZonedDateTime = zonedDateTime)
+
+  /**
+   * Maps each of the possible underlying variants to some [R].
+   *
+   * A visitor can be provided to handle the possible variants. A catch-all default case must be
+   * provided in case a new type is added in a future release of this library.
+   *
+   * @sample [androidx.appactions.builtintypes.samples.properties.endDateMapWhenUsage]
+   */
+  public fun <R> mapWhen(mapper: Mapper<R>): R =
+    when {
+      asDate != null -> mapper.date(asDate)
+      asLocalDateTime != null -> mapper.localDateTime(asLocalDateTime)
+      asZonedDateTime != null -> mapper.zonedDateTime(asZonedDateTime)
+      else -> error("No variant present in EndDate")
+    }
+
+  public override fun toString(): String = toString(includeWrapperName = true)
+
+  internal fun toString(includeWrapperName: Boolean): String =
+    when {
+      asDate != null ->
+        if (includeWrapperName) {
+          """EndDate($asDate)"""
+        } else {
+          asDate.toString()
+        }
+      asLocalDateTime != null ->
+        if (includeWrapperName) {
+          """EndDate($asLocalDateTime)"""
+        } else {
+          asLocalDateTime.toString()
+        }
+      asZonedDateTime != null ->
+        if (includeWrapperName) {
+          """EndDate($asZonedDateTime)"""
+        } else {
+          asZonedDateTime.toString()
+        }
+      else -> error("No variant present in EndDate")
+    }
+
+  public override fun equals(other: Any?): Boolean {
+    if (this === other) return true
+    if (other !is EndDate) return false
+    if (asDate != other.asDate) return false
+    if (asLocalDateTime != other.asLocalDateTime) return false
+    if (asZonedDateTime != other.asZonedDateTime) return false
+    return true
+  }
+
+  public override fun hashCode(): Int = Objects.hash(asDate, asLocalDateTime, asZonedDateTime)
+
+  /** Maps each of the possible variants of [EndDate] to some [R]. */
+  public interface Mapper<R> {
+    /** Returns some [R] when the [EndDate] holds some [LocalDate] instance. */
+    public fun date(instance: LocalDate): R = orElse()
+
+    /** Returns some [R] when the [EndDate] holds some [LocalDateTime] instance. */
+    public fun localDateTime(instance: LocalDateTime): R = orElse()
+
+    /** Returns some [R] when the [EndDate] holds some [ZonedDateTime] instance. */
+    public fun zonedDateTime(instance: ZonedDateTime): R = orElse()
+
+    /** The catch-all handler that is invoked when a particular variant isn't explicitly handled. */
+    public fun orElse(): R
+  }
+}
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/EndTime.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/EndTime.kt
new file mode 100644
index 0000000..a2b3b28
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/EndTime.kt
@@ -0,0 +1,135 @@
+// Copyright 2023 The Android Open Source Project
+//
+// 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 androidx.appactions.builtintypes.properties
+
+import java.time.LocalDateTime
+import java.time.LocalTime
+import java.time.ZonedDateTime
+import java.util.Objects
+import kotlin.Any
+import kotlin.Boolean
+import kotlin.Int
+import kotlin.String
+import kotlin.error
+import kotlin.jvm.JvmName
+
+/**
+ * The endTime of something.
+ *
+ * For a reserved event or service (e.g. `FoodEstablishmentReservation`), the time that it is
+ * expected to end. For actions that span a period of time, when the action was performed. E.g. John
+ * wrote a book from January to *December*. For media, including audio and video, it's the time
+ * offset of the end of a clip within a larger file.
+ *
+ * See http://schema.org/endTime for context.
+ *
+ * Holds one of:
+ * * Time i.e. [LocalTime]
+ * * [LocalDateTime]
+ * * [ZonedDateTime]
+ *
+ * May hold more types over time.
+ */
+public class EndTime
+internal constructor(
+  /** The [LocalTime] variant, or null if constructed using a different variant. */
+  @get:JvmName("asTime") public val asTime: LocalTime? = null,
+  /** The [LocalDateTime] variant, or null if constructed using a different variant. */
+  @get:JvmName("asLocalDateTime") public val asLocalDateTime: LocalDateTime? = null,
+  /** The [ZonedDateTime] variant, or null if constructed using a different variant. */
+  @get:JvmName("asZonedDateTime") public val asZonedDateTime: ZonedDateTime? = null,
+  /**
+   * The AppSearch document's identifier.
+   *
+   * Every AppSearch document needs an identifier. Since property wrappers are only meant to be used
+   * at nested levels, this is internal and will always be an empty string.
+   */
+  internal val identifier: String = "",
+) {
+  /** Constructor for the [LocalTime] variant. */
+  public constructor(time: LocalTime) : this(asTime = time)
+
+  /** Constructor for the [LocalDateTime] variant. */
+  public constructor(localDateTime: LocalDateTime) : this(asLocalDateTime = localDateTime)
+
+  /** Constructor for the [ZonedDateTime] variant. */
+  public constructor(zonedDateTime: ZonedDateTime) : this(asZonedDateTime = zonedDateTime)
+
+  /**
+   * Maps each of the possible underlying variants to some [R].
+   *
+   * A visitor can be provided to handle the possible variants. A catch-all default case must be
+   * provided in case a new type is added in a future release of this library.
+   *
+   * @sample [androidx.appactions.builtintypes.samples.properties.endTimeMapWhenUsage]
+   */
+  public fun <R> mapWhen(mapper: Mapper<R>): R =
+    when {
+      asTime != null -> mapper.time(asTime)
+      asLocalDateTime != null -> mapper.localDateTime(asLocalDateTime)
+      asZonedDateTime != null -> mapper.zonedDateTime(asZonedDateTime)
+      else -> error("No variant present in EndTime")
+    }
+
+  public override fun toString(): String = toString(includeWrapperName = true)
+
+  internal fun toString(includeWrapperName: Boolean): String =
+    when {
+      asTime != null ->
+        if (includeWrapperName) {
+          """EndTime($asTime)"""
+        } else {
+          asTime.toString()
+        }
+      asLocalDateTime != null ->
+        if (includeWrapperName) {
+          """EndTime($asLocalDateTime)"""
+        } else {
+          asLocalDateTime.toString()
+        }
+      asZonedDateTime != null ->
+        if (includeWrapperName) {
+          """EndTime($asZonedDateTime)"""
+        } else {
+          asZonedDateTime.toString()
+        }
+      else -> error("No variant present in EndTime")
+    }
+
+  public override fun equals(other: Any?): Boolean {
+    if (this === other) return true
+    if (other !is EndTime) return false
+    if (asTime != other.asTime) return false
+    if (asLocalDateTime != other.asLocalDateTime) return false
+    if (asZonedDateTime != other.asZonedDateTime) return false
+    return true
+  }
+
+  public override fun hashCode(): Int = Objects.hash(asTime, asLocalDateTime, asZonedDateTime)
+
+  /** Maps each of the possible variants of [EndTime] to some [R]. */
+  public interface Mapper<R> {
+    /** Returns some [R] when the [EndTime] holds some [LocalTime] instance. */
+    public fun time(instance: LocalTime): R = orElse()
+
+    /** Returns some [R] when the [EndTime] holds some [LocalDateTime] instance. */
+    public fun localDateTime(instance: LocalDateTime): R = orElse()
+
+    /** Returns some [R] when the [EndTime] holds some [ZonedDateTime] instance. */
+    public fun zonedDateTime(instance: ZonedDateTime): R = orElse()
+
+    /** The catch-all handler that is invoked when a particular variant isn't explicitly handled. */
+    public fun orElse(): R
+  }
+}
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/ExceptDate.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/ExceptDate.kt
new file mode 100644
index 0000000..ae356b4
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/ExceptDate.kt
@@ -0,0 +1,135 @@
+// Copyright 2023 The Android Open Source Project
+//
+// 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 androidx.appactions.builtintypes.properties
+
+import java.time.LocalDate
+import java.time.LocalDateTime
+import java.time.ZonedDateTime
+import java.util.Objects
+import kotlin.Any
+import kotlin.Boolean
+import kotlin.Int
+import kotlin.String
+import kotlin.error
+import kotlin.jvm.JvmName
+
+/**
+ * Defines a `Date` or `DateTime` during which a scheduled `Event` will not take place. The property
+ * allows exceptions to a `Schedule` to be specified. If an exception is specified as a `DateTime`
+ * then only the event that would have started at that specific date and time should be excluded
+ * from the schedule. If an exception is specified as a `Date` then any event that is scheduled for
+ * that 24 hour period should be excluded from the schedule. This allows a whole day to be excluded
+ * from the schedule without having to itemise every scheduled event.
+ *
+ * See http://schema.org/exceptDate for context.
+ *
+ * Holds one of:
+ * * Date i.e. [LocalDate]
+ * * [LocalDateTime]
+ * * [ZonedDateTime]
+ *
+ * May hold more types over time.
+ */
+public class ExceptDate
+internal constructor(
+  /** The [LocalDate] variant, or null if constructed using a different variant. */
+  @get:JvmName("asDate") public val asDate: LocalDate? = null,
+  /** The [LocalDateTime] variant, or null if constructed using a different variant. */
+  @get:JvmName("asLocalDateTime") public val asLocalDateTime: LocalDateTime? = null,
+  /** The [ZonedDateTime] variant, or null if constructed using a different variant. */
+  @get:JvmName("asZonedDateTime") public val asZonedDateTime: ZonedDateTime? = null,
+  /**
+   * The AppSearch document's identifier.
+   *
+   * Every AppSearch document needs an identifier. Since property wrappers are only meant to be used
+   * at nested levels, this is internal and will always be an empty string.
+   */
+  internal val identifier: String = "",
+) {
+  /** Constructor for the [LocalDate] variant. */
+  public constructor(date: LocalDate) : this(asDate = date)
+
+  /** Constructor for the [LocalDateTime] variant. */
+  public constructor(localDateTime: LocalDateTime) : this(asLocalDateTime = localDateTime)
+
+  /** Constructor for the [ZonedDateTime] variant. */
+  public constructor(zonedDateTime: ZonedDateTime) : this(asZonedDateTime = zonedDateTime)
+
+  /**
+   * Maps each of the possible underlying variants to some [R].
+   *
+   * A visitor can be provided to handle the possible variants. A catch-all default case must be
+   * provided in case a new type is added in a future release of this library.
+   *
+   * @sample [androidx.appactions.builtintypes.samples.properties.exceptDateMapWhenUsage]
+   */
+  public fun <R> mapWhen(mapper: Mapper<R>): R =
+    when {
+      asDate != null -> mapper.date(asDate)
+      asLocalDateTime != null -> mapper.localDateTime(asLocalDateTime)
+      asZonedDateTime != null -> mapper.zonedDateTime(asZonedDateTime)
+      else -> error("No variant present in ExceptDate")
+    }
+
+  public override fun toString(): String = toString(includeWrapperName = true)
+
+  internal fun toString(includeWrapperName: Boolean): String =
+    when {
+      asDate != null ->
+        if (includeWrapperName) {
+          """ExceptDate($asDate)"""
+        } else {
+          asDate.toString()
+        }
+      asLocalDateTime != null ->
+        if (includeWrapperName) {
+          """ExceptDate($asLocalDateTime)"""
+        } else {
+          asLocalDateTime.toString()
+        }
+      asZonedDateTime != null ->
+        if (includeWrapperName) {
+          """ExceptDate($asZonedDateTime)"""
+        } else {
+          asZonedDateTime.toString()
+        }
+      else -> error("No variant present in ExceptDate")
+    }
+
+  public override fun equals(other: Any?): Boolean {
+    if (this === other) return true
+    if (other !is ExceptDate) return false
+    if (asDate != other.asDate) return false
+    if (asLocalDateTime != other.asLocalDateTime) return false
+    if (asZonedDateTime != other.asZonedDateTime) return false
+    return true
+  }
+
+  public override fun hashCode(): Int = Objects.hash(asDate, asLocalDateTime, asZonedDateTime)
+
+  /** Maps each of the possible variants of [ExceptDate] to some [R]. */
+  public interface Mapper<R> {
+    /** Returns some [R] when the [ExceptDate] holds some [LocalDate] instance. */
+    public fun date(instance: LocalDate): R = orElse()
+
+    /** Returns some [R] when the [ExceptDate] holds some [LocalDateTime] instance. */
+    public fun localDateTime(instance: LocalDateTime): R = orElse()
+
+    /** Returns some [R] when the [ExceptDate] holds some [ZonedDateTime] instance. */
+    public fun zonedDateTime(instance: ZonedDateTime): R = orElse()
+
+    /** The catch-all handler that is invoked when a particular variant isn't explicitly handled. */
+    public fun orElse(): R
+  }
+}
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Name.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Name.kt
index 65331b4..d729dc8 100644
--- a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Name.kt
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Name.kt
@@ -28,7 +28,6 @@
  *
  * Holds one of:
  * * Text i.e. [String]
- * * [Name.CanonicalValue]
  *
  * May hold more types over time.
  */
@@ -36,8 +35,6 @@
 internal constructor(
   /** The [String] variant, or null if constructed using a different variant. */
   @get:JvmName("asText") public val asText: String? = null,
-  /** The [CanonicalValue] variant, or null if constructed using a different variant. */
-  @get:JvmName("asCanonicalValue") public val asCanonicalValue: CanonicalValue? = null,
   /**
    * The AppSearch document's identifier.
    *
@@ -49,24 +46,6 @@
   /** Constructor for the [String] variant. */
   public constructor(text: String) : this(asText = text)
 
-  /** Constructor for the [CanonicalValue] variant. */
-  public constructor(canonicalValue: CanonicalValue) : this(asCanonicalValue = canonicalValue)
-
-  /**
-   * Maps each of the possible underlying variants to some [R].
-   *
-   * A visitor can be provided to handle the possible variants. A catch-all default case must be
-   * provided in case a new type is added in a future release of this library.
-   *
-   * @sample [androidx.appactions.builtintypes.samples.properties.nameMapWhenUsage]
-   */
-  public fun <R> mapWhen(mapper: Mapper<R>): R =
-    when {
-      asText != null -> mapper.text(asText)
-      asCanonicalValue != null -> mapper.canonicalValue(asCanonicalValue)
-      else -> error("No variant present in Name")
-    }
-
   public override fun toString(): String = toString(includeWrapperName = true)
 
   internal fun toString(includeWrapperName: Boolean): String =
@@ -77,12 +56,6 @@
         } else {
           asText
         }
-      asCanonicalValue != null ->
-        if (includeWrapperName) {
-          """Name($asCanonicalValue)"""
-        } else {
-          asCanonicalValue.toString()
-        }
       else -> error("No variant present in Name")
     }
 
@@ -90,25 +63,8 @@
     if (this === other) return true
     if (other !is Name) return false
     if (asText != other.asText) return false
-    if (asCanonicalValue != other.asCanonicalValue) return false
     return true
   }
 
-  public override fun hashCode(): Int = Objects.hash(asText, asCanonicalValue)
-
-  /** Maps each of the possible variants of [Name] to some [R]. */
-  public interface Mapper<R> {
-    /** Returns some [R] when the [Name] holds some [String] instance. */
-    public fun text(instance: String): R = orElse()
-
-    /** Returns some [R] when the [Name] holds some [CanonicalValue] instance. */
-    public fun canonicalValue(instance: CanonicalValue): R = orElse()
-
-    /** The catch-all handler that is invoked when a particular variant isn't explicitly handled. */
-    public fun orElse(): R
-  }
-
-  public abstract class CanonicalValue internal constructor() {
-    public abstract val textValue: String
-  }
+  public override fun hashCode(): Int = Objects.hash(asText)
 }
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Description.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/RepeatFrequency.kt
similarity index 64%
copy from appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Description.kt
copy to appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/RepeatFrequency.kt
index cb038b0..e04c423 100644
--- a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Description.kt
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/RepeatFrequency.kt
@@ -13,6 +13,7 @@
 // limitations under the License.
 package androidx.appactions.builtintypes.properties
 
+import java.time.Duration
 import java.util.Objects
 import kotlin.Any
 import kotlin.Boolean
@@ -22,22 +23,23 @@
 import kotlin.jvm.JvmName
 
 /**
- * A description of the item.
+ * Defines the frequency at which `Event`s will occur according to a schedule `Schedule`. The
+ * intervals between events should be defined as a `Duration` of time.
  *
- * See http://schema.org/description for context.
+ * See http://schema.org/repeatFrequency for context.
  *
  * Holds one of:
+ * * [Duration]
  * * Text i.e. [String]
- * * [Description.CanonicalValue]
  *
  * May hold more types over time.
  */
-public class Description
+public class RepeatFrequency
 internal constructor(
+  /** The [Duration] variant, or null if constructed using a different variant. */
+  @get:JvmName("asDuration") public val asDuration: Duration? = null,
   /** The [String] variant, or null if constructed using a different variant. */
   @get:JvmName("asText") public val asText: String? = null,
-  /** The [CanonicalValue] variant, or null if constructed using a different variant. */
-  @get:JvmName("asCanonicalValue") public val asCanonicalValue: CanonicalValue? = null,
   /**
    * The AppSearch document's identifier.
    *
@@ -46,69 +48,65 @@
    */
   internal val identifier: String = "",
 ) {
+  /** Constructor for the [Duration] variant. */
+  public constructor(duration: Duration) : this(asDuration = duration)
+
   /** Constructor for the [String] variant. */
   public constructor(text: String) : this(asText = text)
 
-  /** Constructor for the [CanonicalValue] variant. */
-  public constructor(canonicalValue: CanonicalValue) : this(asCanonicalValue = canonicalValue)
-
   /**
    * Maps each of the possible underlying variants to some [R].
    *
    * A visitor can be provided to handle the possible variants. A catch-all default case must be
    * provided in case a new type is added in a future release of this library.
    *
-   * @sample [androidx.appactions.builtintypes.samples.properties.descriptionMapWhenUsage]
+   * @sample [androidx.appactions.builtintypes.samples.properties.repeatFrequencyMapWhenUsage]
    */
   public fun <R> mapWhen(mapper: Mapper<R>): R =
     when {
+      asDuration != null -> mapper.duration(asDuration)
       asText != null -> mapper.text(asText)
-      asCanonicalValue != null -> mapper.canonicalValue(asCanonicalValue)
-      else -> error("No variant present in Description")
+      else -> error("No variant present in RepeatFrequency")
     }
 
   public override fun toString(): String = toString(includeWrapperName = true)
 
   internal fun toString(includeWrapperName: Boolean): String =
     when {
+      asDuration != null ->
+        if (includeWrapperName) {
+          """RepeatFrequency($asDuration)"""
+        } else {
+          asDuration.toString()
+        }
       asText != null ->
         if (includeWrapperName) {
-          """Description($asText)"""
+          """RepeatFrequency($asText)"""
         } else {
           asText
         }
-      asCanonicalValue != null ->
-        if (includeWrapperName) {
-          """Description($asCanonicalValue)"""
-        } else {
-          asCanonicalValue.toString()
-        }
-      else -> error("No variant present in Description")
+      else -> error("No variant present in RepeatFrequency")
     }
 
   public override fun equals(other: Any?): Boolean {
     if (this === other) return true
-    if (other !is Description) return false
+    if (other !is RepeatFrequency) return false
+    if (asDuration != other.asDuration) return false
     if (asText != other.asText) return false
-    if (asCanonicalValue != other.asCanonicalValue) return false
     return true
   }
 
-  public override fun hashCode(): Int = Objects.hash(asText, asCanonicalValue)
+  public override fun hashCode(): Int = Objects.hash(asDuration, asText)
 
-  /** Maps each of the possible variants of [Description] to some [R]. */
+  /** Maps each of the possible variants of [RepeatFrequency] to some [R]. */
   public interface Mapper<R> {
-    /** Returns some [R] when the [Description] holds some [String] instance. */
-    public fun text(instance: String): R = orElse()
+    /** Returns some [R] when the [RepeatFrequency] holds some [Duration] instance. */
+    public fun duration(instance: Duration): R = orElse()
 
-    /** Returns some [R] when the [Description] holds some [CanonicalValue] instance. */
-    public fun canonicalValue(instance: CanonicalValue): R = orElse()
+    /** Returns some [R] when the [RepeatFrequency] holds some [String] instance. */
+    public fun text(instance: String): R = orElse()
 
     /** The catch-all handler that is invoked when a particular variant isn't explicitly handled. */
     public fun orElse(): R
   }
-
-  public abstract class CanonicalValue internal constructor() {
-    public abstract val textValue: String
-  }
 }
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/StartDate.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/StartDate.kt
new file mode 100644
index 0000000..756b162e
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/StartDate.kt
@@ -0,0 +1,130 @@
+// Copyright 2023 The Android Open Source Project
+//
+// 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 androidx.appactions.builtintypes.properties
+
+import java.time.LocalDate
+import java.time.LocalDateTime
+import java.time.ZonedDateTime
+import java.util.Objects
+import kotlin.Any
+import kotlin.Boolean
+import kotlin.Int
+import kotlin.String
+import kotlin.error
+import kotlin.jvm.JvmName
+
+/**
+ * The start date and time of the item.
+ *
+ * See http://schema.org/startDate for context.
+ *
+ * Holds one of:
+ * * Date i.e. [LocalDate]
+ * * [LocalDateTime]
+ * * [ZonedDateTime]
+ *
+ * May hold more types over time.
+ */
+public class StartDate
+internal constructor(
+  /** The [LocalDate] variant, or null if constructed using a different variant. */
+  @get:JvmName("asDate") public val asDate: LocalDate? = null,
+  /** The [LocalDateTime] variant, or null if constructed using a different variant. */
+  @get:JvmName("asLocalDateTime") public val asLocalDateTime: LocalDateTime? = null,
+  /** The [ZonedDateTime] variant, or null if constructed using a different variant. */
+  @get:JvmName("asZonedDateTime") public val asZonedDateTime: ZonedDateTime? = null,
+  /**
+   * The AppSearch document's identifier.
+   *
+   * Every AppSearch document needs an identifier. Since property wrappers are only meant to be used
+   * at nested levels, this is internal and will always be an empty string.
+   */
+  internal val identifier: String = "",
+) {
+  /** Constructor for the [LocalDate] variant. */
+  public constructor(date: LocalDate) : this(asDate = date)
+
+  /** Constructor for the [LocalDateTime] variant. */
+  public constructor(localDateTime: LocalDateTime) : this(asLocalDateTime = localDateTime)
+
+  /** Constructor for the [ZonedDateTime] variant. */
+  public constructor(zonedDateTime: ZonedDateTime) : this(asZonedDateTime = zonedDateTime)
+
+  /**
+   * Maps each of the possible underlying variants to some [R].
+   *
+   * A visitor can be provided to handle the possible variants. A catch-all default case must be
+   * provided in case a new type is added in a future release of this library.
+   *
+   * @sample [androidx.appactions.builtintypes.samples.properties.startDateMapWhenUsage]
+   */
+  public fun <R> mapWhen(mapper: Mapper<R>): R =
+    when {
+      asDate != null -> mapper.date(asDate)
+      asLocalDateTime != null -> mapper.localDateTime(asLocalDateTime)
+      asZonedDateTime != null -> mapper.zonedDateTime(asZonedDateTime)
+      else -> error("No variant present in StartDate")
+    }
+
+  public override fun toString(): String = toString(includeWrapperName = true)
+
+  internal fun toString(includeWrapperName: Boolean): String =
+    when {
+      asDate != null ->
+        if (includeWrapperName) {
+          """StartDate($asDate)"""
+        } else {
+          asDate.toString()
+        }
+      asLocalDateTime != null ->
+        if (includeWrapperName) {
+          """StartDate($asLocalDateTime)"""
+        } else {
+          asLocalDateTime.toString()
+        }
+      asZonedDateTime != null ->
+        if (includeWrapperName) {
+          """StartDate($asZonedDateTime)"""
+        } else {
+          asZonedDateTime.toString()
+        }
+      else -> error("No variant present in StartDate")
+    }
+
+  public override fun equals(other: Any?): Boolean {
+    if (this === other) return true
+    if (other !is StartDate) return false
+    if (asDate != other.asDate) return false
+    if (asLocalDateTime != other.asLocalDateTime) return false
+    if (asZonedDateTime != other.asZonedDateTime) return false
+    return true
+  }
+
+  public override fun hashCode(): Int = Objects.hash(asDate, asLocalDateTime, asZonedDateTime)
+
+  /** Maps each of the possible variants of [StartDate] to some [R]. */
+  public interface Mapper<R> {
+    /** Returns some [R] when the [StartDate] holds some [LocalDate] instance. */
+    public fun date(instance: LocalDate): R = orElse()
+
+    /** Returns some [R] when the [StartDate] holds some [LocalDateTime] instance. */
+    public fun localDateTime(instance: LocalDateTime): R = orElse()
+
+    /** Returns some [R] when the [StartDate] holds some [ZonedDateTime] instance. */
+    public fun zonedDateTime(instance: ZonedDateTime): R = orElse()
+
+    /** The catch-all handler that is invoked when a particular variant isn't explicitly handled. */
+    public fun orElse(): R
+  }
+}
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/StartTime.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/StartTime.kt
new file mode 100644
index 0000000..8105722
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/StartTime.kt
@@ -0,0 +1,135 @@
+// Copyright 2023 The Android Open Source Project
+//
+// 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 androidx.appactions.builtintypes.properties
+
+import java.time.LocalDateTime
+import java.time.LocalTime
+import java.time.ZonedDateTime
+import java.util.Objects
+import kotlin.Any
+import kotlin.Boolean
+import kotlin.Int
+import kotlin.String
+import kotlin.error
+import kotlin.jvm.JvmName
+
+/**
+ * The startTime of something.
+ *
+ * For a reserved event or service (e.g. `FoodEstablishmentReservation`), the time that it is
+ * expected to start. For actions that span a period of time, when the action was performed. E.g.
+ * John wrote a book from *January* to December. For media, including audio and video, it's the time
+ * offset of the start of a clip within a larger file.
+ *
+ * See http://schema.org/startTime for context.
+ *
+ * Holds one of:
+ * * Time i.e. [LocalTime]
+ * * [LocalDateTime]
+ * * [ZonedDateTime]
+ *
+ * May hold more types over time.
+ */
+public class StartTime
+internal constructor(
+  /** The [LocalTime] variant, or null if constructed using a different variant. */
+  @get:JvmName("asTime") public val asTime: LocalTime? = null,
+  /** The [LocalDateTime] variant, or null if constructed using a different variant. */
+  @get:JvmName("asLocalDateTime") public val asLocalDateTime: LocalDateTime? = null,
+  /** The [ZonedDateTime] variant, or null if constructed using a different variant. */
+  @get:JvmName("asZonedDateTime") public val asZonedDateTime: ZonedDateTime? = null,
+  /**
+   * The AppSearch document's identifier.
+   *
+   * Every AppSearch document needs an identifier. Since property wrappers are only meant to be used
+   * at nested levels, this is internal and will always be an empty string.
+   */
+  internal val identifier: String = "",
+) {
+  /** Constructor for the [LocalTime] variant. */
+  public constructor(time: LocalTime) : this(asTime = time)
+
+  /** Constructor for the [LocalDateTime] variant. */
+  public constructor(localDateTime: LocalDateTime) : this(asLocalDateTime = localDateTime)
+
+  /** Constructor for the [ZonedDateTime] variant. */
+  public constructor(zonedDateTime: ZonedDateTime) : this(asZonedDateTime = zonedDateTime)
+
+  /**
+   * Maps each of the possible underlying variants to some [R].
+   *
+   * A visitor can be provided to handle the possible variants. A catch-all default case must be
+   * provided in case a new type is added in a future release of this library.
+   *
+   * @sample [androidx.appactions.builtintypes.samples.properties.startTimeMapWhenUsage]
+   */
+  public fun <R> mapWhen(mapper: Mapper<R>): R =
+    when {
+      asTime != null -> mapper.time(asTime)
+      asLocalDateTime != null -> mapper.localDateTime(asLocalDateTime)
+      asZonedDateTime != null -> mapper.zonedDateTime(asZonedDateTime)
+      else -> error("No variant present in StartTime")
+    }
+
+  public override fun toString(): String = toString(includeWrapperName = true)
+
+  internal fun toString(includeWrapperName: Boolean): String =
+    when {
+      asTime != null ->
+        if (includeWrapperName) {
+          """StartTime($asTime)"""
+        } else {
+          asTime.toString()
+        }
+      asLocalDateTime != null ->
+        if (includeWrapperName) {
+          """StartTime($asLocalDateTime)"""
+        } else {
+          asLocalDateTime.toString()
+        }
+      asZonedDateTime != null ->
+        if (includeWrapperName) {
+          """StartTime($asZonedDateTime)"""
+        } else {
+          asZonedDateTime.toString()
+        }
+      else -> error("No variant present in StartTime")
+    }
+
+  public override fun equals(other: Any?): Boolean {
+    if (this === other) return true
+    if (other !is StartTime) return false
+    if (asTime != other.asTime) return false
+    if (asLocalDateTime != other.asLocalDateTime) return false
+    if (asZonedDateTime != other.asZonedDateTime) return false
+    return true
+  }
+
+  public override fun hashCode(): Int = Objects.hash(asTime, asLocalDateTime, asZonedDateTime)
+
+  /** Maps each of the possible variants of [StartTime] to some [R]. */
+  public interface Mapper<R> {
+    /** Returns some [R] when the [StartTime] holds some [LocalTime] instance. */
+    public fun time(instance: LocalTime): R = orElse()
+
+    /** Returns some [R] when the [StartTime] holds some [LocalDateTime] instance. */
+    public fun localDateTime(instance: LocalDateTime): R = orElse()
+
+    /** Returns some [R] when the [StartTime] holds some [ZonedDateTime] instance. */
+    public fun zonedDateTime(instance: ZonedDateTime): R = orElse()
+
+    /** The catch-all handler that is invoked when a particular variant isn't explicitly handled. */
+    public fun orElse(): R
+  }
+}
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Temporal.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Temporal.kt
deleted file mode 100644
index 566f98e..0000000
--- a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/properties/Temporal.kt
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright 2023 The Android Open Source Project
-//
-// 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 androidx.appactions.builtintypes.properties
-
-import java.time.LocalDateTime
-import java.time.ZonedDateTime
-import java.util.Objects
-import kotlin.Any
-import kotlin.Boolean
-import kotlin.Int
-import kotlin.String
-import kotlin.error
-import kotlin.jvm.JvmName
-
-/**
- * Can be used in cases where more specific properties (e.g. temporalCoverage, dateCreated,
- * dateModified, datePublished) are not known to be appropriate.
- *
- * See http://schema.googleapis.com/temporal for context.
- *
- * Holds one of:
- * * [LocalDateTime]
- * * [ZonedDateTime]
- * * Text i.e. [String]
- * * [Temporal.CanonicalValue]
- *
- * May hold more types over time.
- */
-public class Temporal
-internal constructor(
-  /** The [LocalDateTime] variant, or null if constructed using a different variant. */
-  @get:JvmName("asLocalDateTime") public val asLocalDateTime: LocalDateTime? = null,
-  /** The [ZonedDateTime] variant, or null if constructed using a different variant. */
-  @get:JvmName("asZonedDateTime") public val asZonedDateTime: ZonedDateTime? = null,
-  /** The [String] variant, or null if constructed using a different variant. */
-  @get:JvmName("asText") public val asText: String? = null,
-  /** The [CanonicalValue] variant, or null if constructed using a different variant. */
-  @get:JvmName("asCanonicalValue") public val asCanonicalValue: CanonicalValue? = null,
-  /**
-   * The AppSearch document's identifier.
-   *
-   * Every AppSearch document needs an identifier. Since property wrappers are only meant to be used
-   * at nested levels, this is internal and will always be an empty string.
-   */
-  internal val identifier: String = "",
-) {
-  /** Constructor for the [LocalDateTime] variant. */
-  public constructor(localDateTime: LocalDateTime) : this(asLocalDateTime = localDateTime)
-
-  /** Constructor for the [ZonedDateTime] variant. */
-  public constructor(zonedDateTime: ZonedDateTime) : this(asZonedDateTime = zonedDateTime)
-
-  /** Constructor for the [String] variant. */
-  public constructor(text: String) : this(asText = text)
-
-  /** Constructor for the [CanonicalValue] variant. */
-  public constructor(canonicalValue: CanonicalValue) : this(asCanonicalValue = canonicalValue)
-
-  /**
-   * Maps each of the possible underlying variants to some [R].
-   *
-   * A visitor can be provided to handle the possible variants. A catch-all default case must be
-   * provided in case a new type is added in a future release of this library.
-   *
-   * @sample [androidx.appactions.builtintypes.samples.properties.temporalMapWhenUsage]
-   */
-  public fun <R> mapWhen(mapper: Mapper<R>): R =
-    when {
-      asLocalDateTime != null -> mapper.localDateTime(asLocalDateTime)
-      asZonedDateTime != null -> mapper.zonedDateTime(asZonedDateTime)
-      asText != null -> mapper.text(asText)
-      asCanonicalValue != null -> mapper.canonicalValue(asCanonicalValue)
-      else -> error("No variant present in Temporal")
-    }
-
-  public override fun toString(): String = toString(includeWrapperName = true)
-
-  internal fun toString(includeWrapperName: Boolean): String =
-    when {
-      asLocalDateTime != null ->
-        if (includeWrapperName) {
-          """Temporal($asLocalDateTime)"""
-        } else {
-          asLocalDateTime.toString()
-        }
-      asZonedDateTime != null ->
-        if (includeWrapperName) {
-          """Temporal($asZonedDateTime)"""
-        } else {
-          asZonedDateTime.toString()
-        }
-      asText != null ->
-        if (includeWrapperName) {
-          """Temporal($asText)"""
-        } else {
-          asText
-        }
-      asCanonicalValue != null ->
-        if (includeWrapperName) {
-          """Temporal($asCanonicalValue)"""
-        } else {
-          asCanonicalValue.toString()
-        }
-      else -> error("No variant present in Temporal")
-    }
-
-  public override fun equals(other: Any?): Boolean {
-    if (this === other) return true
-    if (other !is Temporal) return false
-    if (asLocalDateTime != other.asLocalDateTime) return false
-    if (asZonedDateTime != other.asZonedDateTime) return false
-    if (asText != other.asText) return false
-    if (asCanonicalValue != other.asCanonicalValue) return false
-    return true
-  }
-
-  public override fun hashCode(): Int =
-    Objects.hash(asLocalDateTime, asZonedDateTime, asText, asCanonicalValue)
-
-  /** Maps each of the possible variants of [Temporal] to some [R]. */
-  public interface Mapper<R> {
-    /** Returns some [R] when the [Temporal] holds some [LocalDateTime] instance. */
-    public fun localDateTime(instance: LocalDateTime): R = orElse()
-
-    /** Returns some [R] when the [Temporal] holds some [ZonedDateTime] instance. */
-    public fun zonedDateTime(instance: ZonedDateTime): R = orElse()
-
-    /** Returns some [R] when the [Temporal] holds some [String] instance. */
-    public fun text(instance: String): R = orElse()
-
-    /** Returns some [R] when the [Temporal] holds some [CanonicalValue] instance. */
-    public fun canonicalValue(instance: CanonicalValue): R = orElse()
-
-    /** The catch-all handler that is invoked when a particular variant isn't explicitly handled. */
-    public fun orElse(): R
-  }
-
-  public abstract class CanonicalValue internal constructor() {
-    public abstract val textValue: String
-  }
-}
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Alarm.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Alarm.kt
new file mode 100644
index 0000000..fff77c1
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Alarm.kt
@@ -0,0 +1,380 @@
+// Copyright 2023 The Android Open Source Project
+//
+// 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 androidx.appactions.builtintypes.types
+
+import androidx.appactions.builtintypes.properties.DisambiguatingDescription
+import androidx.appactions.builtintypes.properties.Name
+import java.util.Objects
+import kotlin.Any
+import kotlin.Boolean
+import kotlin.Int
+import kotlin.String
+import kotlin.Suppress
+import kotlin.collections.Map
+import kotlin.collections.emptyMap
+import kotlin.collections.joinToString
+import kotlin.collections.map
+import kotlin.collections.mutableMapOf
+import kotlin.collections.plusAssign
+import kotlin.jvm.JvmField
+import kotlin.jvm.JvmStatic
+
+/**
+ * An alarm set to go off at a specified schedule.
+ *
+ * See http://schema.googleapis.com/Alarm for context.
+ *
+ * Should not be directly implemented. More properties may be added over time. Instead consider
+ * using [Companion.Builder] or see [GenericAlarm] if you need to extend this type.
+ */
+public interface Alarm : Thing {
+  /** Associates an Alarm with a Schedule. */
+  public val alarmSchedule: Schedule?
+
+  /** Converts this [Alarm] to its builder with all the properties copied over. */
+  public override fun toBuilder(): Builder<*>
+
+  public companion object {
+    /** Returns a default implementation of [Builder] with no properties set. */
+    @JvmStatic public fun Builder(): Builder<*> = AlarmImpl.Builder()
+  }
+
+  /**
+   * Builder for [Alarm].
+   *
+   * Should not be directly implemented. More methods may be added over time. See
+   * [GenericAlarm.Builder] if you need to extend this builder.
+   */
+  public interface Builder<Self : Builder<Self>> : Thing.Builder<Self> {
+    /** Returns a built [Alarm]. */
+    public override fun build(): Alarm
+
+    /** Sets the `alarmSchedule`. */
+    public fun setAlarmSchedule(schedule: Schedule?): Self
+
+    /** Sets the `disambiguatingDescription` to a canonical [DisambiguatingDescriptionValue]. */
+    public fun setDisambiguatingDescription(canonicalValue: DisambiguatingDescriptionValue): Self =
+      setDisambiguatingDescription(DisambiguatingDescription(canonicalValue))
+  }
+
+  /**
+   * A canonical value that may be assigned to [DisambiguatingDescription] properties in the context
+   * of [Alarm].
+   *
+   * Represents an open enum. See [Companion] for the different possible variants. More variants may
+   * be added over time.
+   */
+  public class DisambiguatingDescriptionValue
+  private constructor(
+    public override val textValue: String,
+  ) : DisambiguatingDescription.CanonicalValue() {
+    public override fun toString(): String = """Alarm.DisambiguatingDescriptionValue($textValue)"""
+
+    public companion object {
+      @JvmField
+      public val FAMILY_BELL: DisambiguatingDescriptionValue =
+        DisambiguatingDescriptionValue("FamilyBell")
+    }
+  }
+}
+
+/**
+ * A generic implementation of [Alarm].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MyAlarm internal constructor(
+ *   alarm: Alarm,
+ *   val foo: String,
+ *   val bars: List<Int>,
+ * ) : GenericAlarm<
+ *   MyAlarm,
+ *   MyAlarm.Builder
+ * >(alarm) {
+ *
+ *   override val selfTypeName =
+ *     "MyAlarm"
+ *
+ *   override val additionalProperties: Map<String, Any?>
+ *     get() = mapOf("foo" to foo, "bars" to bars)
+ *
+ *   override fun toBuilderWithAdditionalPropertiesOnly(): Builder {
+ *     return Builder()
+ *       .setFoo(foo)
+ *       .addBars(bars)
+ *   }
+ *
+ *   class Builder :
+ *     GenericAlarm.Builder<
+ *       Builder,
+ *       MyAlarm> {...}
+ * }
+ * ```
+ *
+ * Also see [GenericAlarm.Builder].
+ */
+@Suppress("UNCHECKED_CAST")
+public abstract class GenericAlarm<
+  Self : GenericAlarm<Self, Builder>, Builder : GenericAlarm.Builder<Builder, Self>>
+internal constructor(
+  public final override val alarmSchedule: Schedule?,
+  public final override val disambiguatingDescription: DisambiguatingDescription?,
+  public final override val identifier: String?,
+  public final override val name: Name?,
+) : Alarm {
+  /**
+   * Human readable name for the concrete [Self] class.
+   *
+   * Used in the [toString] output.
+   */
+  protected abstract val selfTypeName: String
+
+  /**
+   * The additional properties that exist on the concrete [Self] class.
+   *
+   * Used for equality comparison and computing the hash code.
+   */
+  protected abstract val additionalProperties: Map<String, Any?>
+
+  /** A copy-constructor that copies over properties from another [Alarm] instance. */
+  public constructor(
+    alarm: Alarm
+  ) : this(alarm.alarmSchedule, alarm.disambiguatingDescription, alarm.identifier, alarm.name)
+
+  /** Returns a concrete [Builder] with the additional, non-[Alarm] properties copied over. */
+  protected abstract fun toBuilderWithAdditionalPropertiesOnly(): Builder
+
+  public final override fun toBuilder(): Builder =
+    toBuilderWithAdditionalPropertiesOnly()
+      .setAlarmSchedule(alarmSchedule)
+      .setDisambiguatingDescription(disambiguatingDescription)
+      .setIdentifier(identifier)
+      .setName(name)
+
+  public final override fun equals(other: Any?): Boolean {
+    if (this === other) return true
+    if (other == null || this::class.java != other::class.java) return false
+    other as Self
+    if (alarmSchedule != other.alarmSchedule) return false
+    if (disambiguatingDescription != other.disambiguatingDescription) return false
+    if (identifier != other.identifier) return false
+    if (name != other.name) return false
+    if (additionalProperties != other.additionalProperties) return false
+    return true
+  }
+
+  public final override fun hashCode(): Int =
+    Objects.hash(alarmSchedule, disambiguatingDescription, identifier, name, additionalProperties)
+
+  public final override fun toString(): String {
+    val attributes = mutableMapOf<String, String>()
+    if (alarmSchedule != null) {
+      attributes["alarmSchedule"] = alarmSchedule.toString()
+    }
+    if (disambiguatingDescription != null) {
+      attributes["disambiguatingDescription"] =
+        disambiguatingDescription.toString(includeWrapperName = false)
+    }
+    if (identifier != null) {
+      attributes["identifier"] = identifier
+    }
+    if (name != null) {
+      attributes["name"] = name.toString(includeWrapperName = false)
+    }
+    attributes += additionalProperties.map { (k, v) -> k to v.toString() }
+    val commaSeparated = attributes.entries.joinToString(separator = ", ") { (k, v) -> """$k=$v""" }
+    return """$selfTypeName($commaSeparated)"""
+  }
+
+  /**
+   * A generic implementation of [Alarm.Builder].
+   *
+   * Allows for extension like:
+   * ```kt
+   * class MyAlarm :
+   *   : GenericAlarm<
+   *     MyAlarm,
+   *     MyAlarm.Builder>(...) {
+   *
+   *   class Builder
+   *   : Builder<
+   *       Builder,
+   *       MyAlarm
+   *   >() {
+   *     private var foo: String? = null
+   *     private val bars = mutableListOf<Int>()
+   *
+   *     override val selfTypeName =
+   *       "MyAlarm.Builder"
+   *
+   *     override val additionalProperties: Map<String, Any?>
+   *       get() = mapOf("foo" to foo, "bars" to bars)
+   *
+   *     override fun buildFromAlarm(
+   *       alarm: Alarm
+   *     ): MyAlarm {
+   *       return MyAlarm(
+   *         alarm,
+   *         foo,
+   *         bars.toList()
+   *       )
+   *     }
+   *
+   *     fun setFoo(string: String): Builder {
+   *       return apply { foo = string }
+   *     }
+   *
+   *     fun addBar(int: Int): Builder {
+   *       return apply { bars += int }
+   *     }
+   *
+   *     fun addBars(values: Iterable<Int>): Builder {
+   *       return apply { bars += values }
+   *     }
+   *   }
+   * }
+   * ```
+   *
+   * Also see [GenericAlarm].
+   */
+  @Suppress("StaticFinalBuilder")
+  public abstract class Builder<Self : Builder<Self, Built>, Built : GenericAlarm<Built, Self>> :
+    Alarm.Builder<Self> {
+    /**
+     * Human readable name for the concrete [Self] class.
+     *
+     * Used in the [toString] output.
+     */
+    @get:Suppress("GetterOnBuilder") protected abstract val selfTypeName: String
+
+    /**
+     * The additional properties that exist on the concrete [Self] class.
+     *
+     * Used for equality comparison and computing the hash code.
+     */
+    @get:Suppress("GetterOnBuilder") protected abstract val additionalProperties: Map<String, Any?>
+
+    private var alarmSchedule: Schedule? = null
+
+    private var disambiguatingDescription: DisambiguatingDescription? = null
+
+    private var identifier: String? = null
+
+    private var name: Name? = null
+
+    /**
+     * Builds a concrete [Built] instance, given a built [Alarm].
+     *
+     * Subclasses should override this method to build a concrete [Built] instance that holds both
+     * the [Alarm]-specific properties and the subclass specific [additionalProperties].
+     *
+     * See the sample code in the documentation of this class for more context.
+     */
+    @Suppress("BuilderSetStyle") protected abstract fun buildFromAlarm(alarm: Alarm): Built
+
+    public final override fun build(): Built =
+      buildFromAlarm(AlarmImpl(alarmSchedule, disambiguatingDescription, identifier, name))
+
+    public final override fun setAlarmSchedule(schedule: Schedule?): Self {
+      this.alarmSchedule = schedule
+      return this as Self
+    }
+
+    public final override fun setDisambiguatingDescription(
+      disambiguatingDescription: DisambiguatingDescription?
+    ): Self {
+      this.disambiguatingDescription = disambiguatingDescription
+      return this as Self
+    }
+
+    public final override fun setIdentifier(text: String?): Self {
+      this.identifier = text
+      return this as Self
+    }
+
+    public final override fun setName(name: Name?): Self {
+      this.name = name
+      return this as Self
+    }
+
+    @Suppress("BuilderSetStyle")
+    public final override fun equals(other: Any?): Boolean {
+      if (this === other) return true
+      if (other == null || this::class.java != other::class.java) return false
+      other as Self
+      if (alarmSchedule != other.alarmSchedule) return false
+      if (disambiguatingDescription != other.disambiguatingDescription) return false
+      if (identifier != other.identifier) return false
+      if (name != other.name) return false
+      if (additionalProperties != other.additionalProperties) return false
+      return true
+    }
+
+    @Suppress("BuilderSetStyle")
+    public final override fun hashCode(): Int =
+      Objects.hash(alarmSchedule, disambiguatingDescription, identifier, name, additionalProperties)
+
+    @Suppress("BuilderSetStyle")
+    public final override fun toString(): String {
+      val attributes = mutableMapOf<String, String>()
+      if (alarmSchedule != null) {
+        attributes["alarmSchedule"] = alarmSchedule!!.toString()
+      }
+      if (disambiguatingDescription != null) {
+        attributes["disambiguatingDescription"] =
+          disambiguatingDescription!!.toString(includeWrapperName = false)
+      }
+      if (identifier != null) {
+        attributes["identifier"] = identifier!!
+      }
+      if (name != null) {
+        attributes["name"] = name!!.toString(includeWrapperName = false)
+      }
+      attributes += additionalProperties.map { (k, v) -> k to v.toString() }
+      val commaSeparated =
+        attributes.entries.joinToString(separator = ", ") { (k, v) -> """$k=$v""" }
+      return """$selfTypeName($commaSeparated)"""
+    }
+  }
+}
+
+internal class AlarmImpl : GenericAlarm<AlarmImpl, AlarmImpl.Builder> {
+  protected override val selfTypeName: String
+    get() = "Alarm"
+
+  protected override val additionalProperties: Map<String, Any?>
+    get() = emptyMap()
+
+  public constructor(
+    alarmSchedule: Schedule?,
+    disambiguatingDescription: DisambiguatingDescription?,
+    identifier: String?,
+    name: Name?,
+  ) : super(alarmSchedule, disambiguatingDescription, identifier, name)
+
+  public constructor(alarm: Alarm) : super(alarm)
+
+  protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
+
+  internal class Builder : GenericAlarm.Builder<Builder, AlarmImpl>() {
+    protected override val selfTypeName: String
+      get() = "Alarm.Builder"
+
+    protected override val additionalProperties: Map<String, Any?>
+      get() = emptyMap()
+
+    protected override fun buildFromAlarm(alarm: Alarm): AlarmImpl =
+      alarm as? AlarmImpl ?: AlarmImpl(alarm)
+  }
+}
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/DayOfWeek.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/DayOfWeek.kt
new file mode 100644
index 0000000..737ebe2
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/DayOfWeek.kt
@@ -0,0 +1,120 @@
+// Copyright 2023 The Android Open Source Project
+//
+// 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 androidx.appactions.builtintypes.types
+
+import kotlin.String
+import kotlin.jvm.JvmField
+
+/**
+ * The day of the week.
+ *
+ * See http://schema.org/DayOfWeek for context.
+ *
+ * Represents an open enum. See [Companion] for the different possible variants. More variants may
+ * be added over time.
+ */
+public class DayOfWeek
+private constructor(
+  public val canonicalUrl: String,
+) {
+  /**
+   * Maps each of the possible variants to some [R].
+   *
+   * A visitor can be provided to handle the possible variants. A catch-all default case must be
+   * provided in case a new variant is added in a future release of this library.
+   *
+   * @sample [androidx.appactions.builtintypes.samples.types.dayOfWeekMapWhenUsage]
+   */
+  public fun <R> mapWhen(mapper: Mapper<R>): R =
+    when (this) {
+      FRIDAY -> mapper.friday()
+      MONDAY -> mapper.monday()
+      PUBLIC_HOLIDAYS -> mapper.publicHolidays()
+      SATURDAY -> mapper.saturday()
+      SUNDAY -> mapper.sunday()
+      THURSDAY -> mapper.thursday()
+      TUESDAY -> mapper.tuesday()
+      WEDNESDAY -> mapper.wednesday()
+      else -> mapper.orElse()
+    }
+
+  public override fun toString(): String = """DayOfWeek($canonicalUrl)"""
+
+  public companion object {
+    /** The day of the week between Thursday and Saturday. */
+    @JvmField public val FRIDAY: DayOfWeek = DayOfWeek(canonicalUrl = "http://schema.org/Friday")
+
+    /** The day of the week between Sunday and Tuesday. */
+    @JvmField public val MONDAY: DayOfWeek = DayOfWeek(canonicalUrl = "http://schema.org/Monday")
+
+    /**
+     * This stands for any day that is a public holiday; it is a placeholder for all official public
+     * holidays in some particular location. While not technically a "day of the week", it can be
+     * used with `OpeningHoursSpecification`. In the context of an opening hours specification it
+     * can be used to indicate opening hours on public holidays, overriding general opening hours
+     * for the day of the week on which a public holiday occurs.
+     */
+    @JvmField
+    public val PUBLIC_HOLIDAYS: DayOfWeek =
+      DayOfWeek(canonicalUrl = "http://schema.org/PublicHolidays")
+
+    /** The day of the week between Friday and Sunday. */
+    @JvmField
+    public val SATURDAY: DayOfWeek = DayOfWeek(canonicalUrl = "http://schema.org/Saturday")
+
+    /** The day of the week between Saturday and Monday. */
+    @JvmField public val SUNDAY: DayOfWeek = DayOfWeek(canonicalUrl = "http://schema.org/Sunday")
+
+    /** The day of the week between Wednesday and Friday. */
+    @JvmField
+    public val THURSDAY: DayOfWeek = DayOfWeek(canonicalUrl = "http://schema.org/Thursday")
+
+    /** The day of the week between Monday and Wednesday. */
+    @JvmField public val TUESDAY: DayOfWeek = DayOfWeek(canonicalUrl = "http://schema.org/Tuesday")
+
+    /** The day of the week between Tuesday and Thursday. */
+    @JvmField
+    public val WEDNESDAY: DayOfWeek = DayOfWeek(canonicalUrl = "http://schema.org/Wednesday")
+  }
+
+  /** Maps each of the possible variants of [DayOfWeek] to some [R]. */
+  public interface Mapper<R> {
+    /** Returns some [R] when the [DayOfWeek] is [FRIDAY]. */
+    public fun friday(): R = orElse()
+
+    /** Returns some [R] when the [DayOfWeek] is [MONDAY]. */
+    public fun monday(): R = orElse()
+
+    /** Returns some [R] when the [DayOfWeek] is [PUBLIC_HOLIDAYS]. */
+    public fun publicHolidays(): R = orElse()
+
+    /** Returns some [R] when the [DayOfWeek] is [SATURDAY]. */
+    public fun saturday(): R = orElse()
+
+    /** Returns some [R] when the [DayOfWeek] is [SUNDAY]. */
+    public fun sunday(): R = orElse()
+
+    /** Returns some [R] when the [DayOfWeek] is [THURSDAY]. */
+    public fun thursday(): R = orElse()
+
+    /** Returns some [R] when the [DayOfWeek] is [TUESDAY]. */
+    public fun tuesday(): R = orElse()
+
+    /** Returns some [R] when the [DayOfWeek] is [WEDNESDAY]. */
+    public fun wednesday(): R = orElse()
+
+    /** The catch-all handler that is invoked when a particular variant isn't explicitly handled. */
+    public fun orElse(): R
+  }
+}
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Intangible.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Intangible.kt
new file mode 100644
index 0000000..e1d1386
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Intangible.kt
@@ -0,0 +1,334 @@
+// Copyright 2023 The Android Open Source Project
+//
+// 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 androidx.appactions.builtintypes.types
+
+import androidx.appactions.builtintypes.properties.DisambiguatingDescription
+import androidx.appactions.builtintypes.properties.Name
+import java.util.Objects
+import kotlin.Any
+import kotlin.Boolean
+import kotlin.Int
+import kotlin.String
+import kotlin.Suppress
+import kotlin.collections.Map
+import kotlin.collections.emptyMap
+import kotlin.collections.joinToString
+import kotlin.collections.map
+import kotlin.collections.mutableMapOf
+import kotlin.collections.plusAssign
+import kotlin.jvm.JvmStatic
+
+/**
+ * A utility class that serves as the umbrella for a number of 'intangible' things such as
+ * quantities, structured values, etc.
+ *
+ * See http://schema.org/Intangible for context.
+ *
+ * Should not be directly implemented. More properties may be added over time. Instead consider
+ * using [Companion.Builder] or see [GenericIntangible] if you need to extend this type.
+ */
+public interface Intangible : Thing {
+  /** Converts this [Intangible] to its builder with all the properties copied over. */
+  public override fun toBuilder(): Builder<*>
+
+  public companion object {
+    /** Returns a default implementation of [Builder] with no properties set. */
+    @JvmStatic public fun Builder(): Builder<*> = IntangibleImpl.Builder()
+  }
+
+  /**
+   * Builder for [Intangible].
+   *
+   * Should not be directly implemented. More methods may be added over time. See
+   * [GenericIntangible.Builder] if you need to extend this builder.
+   */
+  public interface Builder<Self : Builder<Self>> : Thing.Builder<Self> {
+    /** Returns a built [Intangible]. */
+    public override fun build(): Intangible
+  }
+}
+
+/**
+ * A generic implementation of [Intangible].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MyIntangible internal constructor(
+ *   intangible: Intangible,
+ *   val foo: String,
+ *   val bars: List<Int>,
+ * ) : GenericIntangible<
+ *   MyIntangible,
+ *   MyIntangible.Builder
+ * >(intangible) {
+ *
+ *   override val selfTypeName =
+ *     "MyIntangible"
+ *
+ *   override val additionalProperties: Map<String, Any?>
+ *     get() = mapOf("foo" to foo, "bars" to bars)
+ *
+ *   override fun toBuilderWithAdditionalPropertiesOnly(): Builder {
+ *     return Builder()
+ *       .setFoo(foo)
+ *       .addBars(bars)
+ *   }
+ *
+ *   class Builder :
+ *     GenericIntangible.Builder<
+ *       Builder,
+ *       MyIntangible> {...}
+ * }
+ * ```
+ *
+ * Also see [GenericIntangible.Builder].
+ */
+@Suppress("UNCHECKED_CAST")
+public abstract class GenericIntangible<
+  Self : GenericIntangible<Self, Builder>, Builder : GenericIntangible.Builder<Builder, Self>>
+internal constructor(
+  public final override val disambiguatingDescription: DisambiguatingDescription?,
+  public final override val identifier: String?,
+  public final override val name: Name?,
+) : Intangible {
+  /**
+   * Human readable name for the concrete [Self] class.
+   *
+   * Used in the [toString] output.
+   */
+  protected abstract val selfTypeName: String
+
+  /**
+   * The additional properties that exist on the concrete [Self] class.
+   *
+   * Used for equality comparison and computing the hash code.
+   */
+  protected abstract val additionalProperties: Map<String, Any?>
+
+  /** A copy-constructor that copies over properties from another [Intangible] instance. */
+  public constructor(
+    intangible: Intangible
+  ) : this(intangible.disambiguatingDescription, intangible.identifier, intangible.name)
+
+  /** Returns a concrete [Builder] with the additional, non-[Intangible] properties copied over. */
+  protected abstract fun toBuilderWithAdditionalPropertiesOnly(): Builder
+
+  public final override fun toBuilder(): Builder =
+    toBuilderWithAdditionalPropertiesOnly()
+      .setDisambiguatingDescription(disambiguatingDescription)
+      .setIdentifier(identifier)
+      .setName(name)
+
+  public final override fun equals(other: Any?): Boolean {
+    if (this === other) return true
+    if (other == null || this::class.java != other::class.java) return false
+    other as Self
+    if (disambiguatingDescription != other.disambiguatingDescription) return false
+    if (identifier != other.identifier) return false
+    if (name != other.name) return false
+    if (additionalProperties != other.additionalProperties) return false
+    return true
+  }
+
+  public final override fun hashCode(): Int =
+    Objects.hash(disambiguatingDescription, identifier, name, additionalProperties)
+
+  public final override fun toString(): String {
+    val attributes = mutableMapOf<String, String>()
+    if (disambiguatingDescription != null) {
+      attributes["disambiguatingDescription"] =
+        disambiguatingDescription.toString(includeWrapperName = false)
+    }
+    if (identifier != null) {
+      attributes["identifier"] = identifier
+    }
+    if (name != null) {
+      attributes["name"] = name.toString(includeWrapperName = false)
+    }
+    attributes += additionalProperties.map { (k, v) -> k to v.toString() }
+    val commaSeparated = attributes.entries.joinToString(separator = ", ") { (k, v) -> """$k=$v""" }
+    return """$selfTypeName($commaSeparated)"""
+  }
+
+  /**
+   * A generic implementation of [Intangible.Builder].
+   *
+   * Allows for extension like:
+   * ```kt
+   * class MyIntangible :
+   *   : GenericIntangible<
+   *     MyIntangible,
+   *     MyIntangible.Builder>(...) {
+   *
+   *   class Builder
+   *   : Builder<
+   *       Builder,
+   *       MyIntangible
+   *   >() {
+   *     private var foo: String? = null
+   *     private val bars = mutableListOf<Int>()
+   *
+   *     override val selfTypeName =
+   *       "MyIntangible.Builder"
+   *
+   *     override val additionalProperties: Map<String, Any?>
+   *       get() = mapOf("foo" to foo, "bars" to bars)
+   *
+   *     override fun buildFromIntangible(
+   *       intangible: Intangible
+   *     ): MyIntangible {
+   *       return MyIntangible(
+   *         intangible,
+   *         foo,
+   *         bars.toList()
+   *       )
+   *     }
+   *
+   *     fun setFoo(string: String): Builder {
+   *       return apply { foo = string }
+   *     }
+   *
+   *     fun addBar(int: Int): Builder {
+   *       return apply { bars += int }
+   *     }
+   *
+   *     fun addBars(values: Iterable<Int>): Builder {
+   *       return apply { bars += values }
+   *     }
+   *   }
+   * }
+   * ```
+   *
+   * Also see [GenericIntangible].
+   */
+  @Suppress("StaticFinalBuilder")
+  public abstract class Builder<
+    Self : Builder<Self, Built>, Built : GenericIntangible<Built, Self>> :
+    Intangible.Builder<Self> {
+    /**
+     * Human readable name for the concrete [Self] class.
+     *
+     * Used in the [toString] output.
+     */
+    @get:Suppress("GetterOnBuilder") protected abstract val selfTypeName: String
+
+    /**
+     * The additional properties that exist on the concrete [Self] class.
+     *
+     * Used for equality comparison and computing the hash code.
+     */
+    @get:Suppress("GetterOnBuilder") protected abstract val additionalProperties: Map<String, Any?>
+
+    private var disambiguatingDescription: DisambiguatingDescription? = null
+
+    private var identifier: String? = null
+
+    private var name: Name? = null
+
+    /**
+     * Builds a concrete [Built] instance, given a built [Intangible].
+     *
+     * Subclasses should override this method to build a concrete [Built] instance that holds both
+     * the [Intangible]-specific properties and the subclass specific [additionalProperties].
+     *
+     * See the sample code in the documentation of this class for more context.
+     */
+    @Suppress("BuilderSetStyle")
+    protected abstract fun buildFromIntangible(intangible: Intangible): Built
+
+    public final override fun build(): Built =
+      buildFromIntangible(IntangibleImpl(disambiguatingDescription, identifier, name))
+
+    public final override fun setDisambiguatingDescription(
+      disambiguatingDescription: DisambiguatingDescription?
+    ): Self {
+      this.disambiguatingDescription = disambiguatingDescription
+      return this as Self
+    }
+
+    public final override fun setIdentifier(text: String?): Self {
+      this.identifier = text
+      return this as Self
+    }
+
+    public final override fun setName(name: Name?): Self {
+      this.name = name
+      return this as Self
+    }
+
+    @Suppress("BuilderSetStyle")
+    public final override fun equals(other: Any?): Boolean {
+      if (this === other) return true
+      if (other == null || this::class.java != other::class.java) return false
+      other as Self
+      if (disambiguatingDescription != other.disambiguatingDescription) return false
+      if (identifier != other.identifier) return false
+      if (name != other.name) return false
+      if (additionalProperties != other.additionalProperties) return false
+      return true
+    }
+
+    @Suppress("BuilderSetStyle")
+    public final override fun hashCode(): Int =
+      Objects.hash(disambiguatingDescription, identifier, name, additionalProperties)
+
+    @Suppress("BuilderSetStyle")
+    public final override fun toString(): String {
+      val attributes = mutableMapOf<String, String>()
+      if (disambiguatingDescription != null) {
+        attributes["disambiguatingDescription"] =
+          disambiguatingDescription!!.toString(includeWrapperName = false)
+      }
+      if (identifier != null) {
+        attributes["identifier"] = identifier!!
+      }
+      if (name != null) {
+        attributes["name"] = name!!.toString(includeWrapperName = false)
+      }
+      attributes += additionalProperties.map { (k, v) -> k to v.toString() }
+      val commaSeparated =
+        attributes.entries.joinToString(separator = ", ") { (k, v) -> """$k=$v""" }
+      return """$selfTypeName($commaSeparated)"""
+    }
+  }
+}
+
+internal class IntangibleImpl : GenericIntangible<IntangibleImpl, IntangibleImpl.Builder> {
+  protected override val selfTypeName: String
+    get() = "Intangible"
+
+  protected override val additionalProperties: Map<String, Any?>
+    get() = emptyMap()
+
+  public constructor(
+    disambiguatingDescription: DisambiguatingDescription?,
+    identifier: String?,
+    name: Name?,
+  ) : super(disambiguatingDescription, identifier, name)
+
+  public constructor(intangible: Intangible) : super(intangible)
+
+  protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
+
+  internal class Builder : GenericIntangible.Builder<Builder, IntangibleImpl>() {
+    protected override val selfTypeName: String
+      get() = "Intangible.Builder"
+
+    protected override val additionalProperties: Map<String, Any?>
+      get() = emptyMap()
+
+    protected override fun buildFromIntangible(intangible: Intangible): IntangibleImpl =
+      intangible as? IntangibleImpl ?: IntangibleImpl(intangible)
+  }
+}
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Person.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Person.kt
new file mode 100644
index 0000000..37403bb
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Person.kt
@@ -0,0 +1,355 @@
+// Copyright 2023 The Android Open Source Project
+//
+// 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 androidx.appactions.builtintypes.types
+
+import androidx.appactions.builtintypes.properties.DisambiguatingDescription
+import androidx.appactions.builtintypes.properties.Name
+import java.util.Objects
+import kotlin.Any
+import kotlin.Boolean
+import kotlin.Int
+import kotlin.String
+import kotlin.Suppress
+import kotlin.collections.Map
+import kotlin.collections.emptyMap
+import kotlin.collections.joinToString
+import kotlin.collections.map
+import kotlin.collections.mutableMapOf
+import kotlin.collections.plusAssign
+import kotlin.jvm.JvmStatic
+
+/**
+ * A person (alive, dead, undead, or fictional).
+ *
+ * See http://schema.org/Person for context.
+ *
+ * Should not be directly implemented. More properties may be added over time. Instead consider
+ * using [Companion.Builder] or see [GenericPerson] if you need to extend this type.
+ */
+public interface Person : Thing {
+  /** Email address. */
+  public val email: String?
+
+  /** Converts this [Person] to its builder with all the properties copied over. */
+  public override fun toBuilder(): Builder<*>
+
+  public companion object {
+    /** Returns a default implementation of [Builder] with no properties set. */
+    @JvmStatic public fun Builder(): Builder<*> = PersonImpl.Builder()
+  }
+
+  /**
+   * Builder for [Person].
+   *
+   * Should not be directly implemented. More methods may be added over time. See
+   * [GenericPerson.Builder] if you need to extend this builder.
+   */
+  public interface Builder<Self : Builder<Self>> : Thing.Builder<Self> {
+    /** Returns a built [Person]. */
+    public override fun build(): Person
+
+    /** Sets the `email`. */
+    public fun setEmail(text: String?): Self
+  }
+}
+
+/**
+ * A generic implementation of [Person].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MyPerson internal constructor(
+ *   person: Person,
+ *   val foo: String,
+ *   val bars: List<Int>,
+ * ) : GenericPerson<
+ *   MyPerson,
+ *   MyPerson.Builder
+ * >(person) {
+ *
+ *   override val selfTypeName =
+ *     "MyPerson"
+ *
+ *   override val additionalProperties: Map<String, Any?>
+ *     get() = mapOf("foo" to foo, "bars" to bars)
+ *
+ *   override fun toBuilderWithAdditionalPropertiesOnly(): Builder {
+ *     return Builder()
+ *       .setFoo(foo)
+ *       .addBars(bars)
+ *   }
+ *
+ *   class Builder :
+ *     GenericPerson.Builder<
+ *       Builder,
+ *       MyPerson> {...}
+ * }
+ * ```
+ *
+ * Also see [GenericPerson.Builder].
+ */
+@Suppress("UNCHECKED_CAST")
+public abstract class GenericPerson<
+  Self : GenericPerson<Self, Builder>, Builder : GenericPerson.Builder<Builder, Self>>
+internal constructor(
+  public final override val email: String?,
+  public final override val disambiguatingDescription: DisambiguatingDescription?,
+  public final override val identifier: String?,
+  public final override val name: Name?,
+) : Person {
+  /**
+   * Human readable name for the concrete [Self] class.
+   *
+   * Used in the [toString] output.
+   */
+  protected abstract val selfTypeName: String
+
+  /**
+   * The additional properties that exist on the concrete [Self] class.
+   *
+   * Used for equality comparison and computing the hash code.
+   */
+  protected abstract val additionalProperties: Map<String, Any?>
+
+  /** A copy-constructor that copies over properties from another [Person] instance. */
+  public constructor(
+    person: Person
+  ) : this(person.email, person.disambiguatingDescription, person.identifier, person.name)
+
+  /** Returns a concrete [Builder] with the additional, non-[Person] properties copied over. */
+  protected abstract fun toBuilderWithAdditionalPropertiesOnly(): Builder
+
+  public final override fun toBuilder(): Builder =
+    toBuilderWithAdditionalPropertiesOnly()
+      .setEmail(email)
+      .setDisambiguatingDescription(disambiguatingDescription)
+      .setIdentifier(identifier)
+      .setName(name)
+
+  public final override fun equals(other: Any?): Boolean {
+    if (this === other) return true
+    if (other == null || this::class.java != other::class.java) return false
+    other as Self
+    if (email != other.email) return false
+    if (disambiguatingDescription != other.disambiguatingDescription) return false
+    if (identifier != other.identifier) return false
+    if (name != other.name) return false
+    if (additionalProperties != other.additionalProperties) return false
+    return true
+  }
+
+  public final override fun hashCode(): Int =
+    Objects.hash(email, disambiguatingDescription, identifier, name, additionalProperties)
+
+  public final override fun toString(): String {
+    val attributes = mutableMapOf<String, String>()
+    if (email != null) {
+      attributes["email"] = email
+    }
+    if (disambiguatingDescription != null) {
+      attributes["disambiguatingDescription"] =
+        disambiguatingDescription.toString(includeWrapperName = false)
+    }
+    if (identifier != null) {
+      attributes["identifier"] = identifier
+    }
+    if (name != null) {
+      attributes["name"] = name.toString(includeWrapperName = false)
+    }
+    attributes += additionalProperties.map { (k, v) -> k to v.toString() }
+    val commaSeparated = attributes.entries.joinToString(separator = ", ") { (k, v) -> """$k=$v""" }
+    return """$selfTypeName($commaSeparated)"""
+  }
+
+  /**
+   * A generic implementation of [Person.Builder].
+   *
+   * Allows for extension like:
+   * ```kt
+   * class MyPerson :
+   *   : GenericPerson<
+   *     MyPerson,
+   *     MyPerson.Builder>(...) {
+   *
+   *   class Builder
+   *   : Builder<
+   *       Builder,
+   *       MyPerson
+   *   >() {
+   *     private var foo: String? = null
+   *     private val bars = mutableListOf<Int>()
+   *
+   *     override val selfTypeName =
+   *       "MyPerson.Builder"
+   *
+   *     override val additionalProperties: Map<String, Any?>
+   *       get() = mapOf("foo" to foo, "bars" to bars)
+   *
+   *     override fun buildFromPerson(
+   *       person: Person
+   *     ): MyPerson {
+   *       return MyPerson(
+   *         person,
+   *         foo,
+   *         bars.toList()
+   *       )
+   *     }
+   *
+   *     fun setFoo(string: String): Builder {
+   *       return apply { foo = string }
+   *     }
+   *
+   *     fun addBar(int: Int): Builder {
+   *       return apply { bars += int }
+   *     }
+   *
+   *     fun addBars(values: Iterable<Int>): Builder {
+   *       return apply { bars += values }
+   *     }
+   *   }
+   * }
+   * ```
+   *
+   * Also see [GenericPerson].
+   */
+  @Suppress("StaticFinalBuilder")
+  public abstract class Builder<Self : Builder<Self, Built>, Built : GenericPerson<Built, Self>> :
+    Person.Builder<Self> {
+    /**
+     * Human readable name for the concrete [Self] class.
+     *
+     * Used in the [toString] output.
+     */
+    @get:Suppress("GetterOnBuilder") protected abstract val selfTypeName: String
+
+    /**
+     * The additional properties that exist on the concrete [Self] class.
+     *
+     * Used for equality comparison and computing the hash code.
+     */
+    @get:Suppress("GetterOnBuilder") protected abstract val additionalProperties: Map<String, Any?>
+
+    private var email: String? = null
+
+    private var disambiguatingDescription: DisambiguatingDescription? = null
+
+    private var identifier: String? = null
+
+    private var name: Name? = null
+
+    /**
+     * Builds a concrete [Built] instance, given a built [Person].
+     *
+     * Subclasses should override this method to build a concrete [Built] instance that holds both
+     * the [Person]-specific properties and the subclass specific [additionalProperties].
+     *
+     * See the sample code in the documentation of this class for more context.
+     */
+    @Suppress("BuilderSetStyle") protected abstract fun buildFromPerson(person: Person): Built
+
+    public final override fun build(): Built =
+      buildFromPerson(PersonImpl(email, disambiguatingDescription, identifier, name))
+
+    public final override fun setEmail(text: String?): Self {
+      this.email = text
+      return this as Self
+    }
+
+    public final override fun setDisambiguatingDescription(
+      disambiguatingDescription: DisambiguatingDescription?
+    ): Self {
+      this.disambiguatingDescription = disambiguatingDescription
+      return this as Self
+    }
+
+    public final override fun setIdentifier(text: String?): Self {
+      this.identifier = text
+      return this as Self
+    }
+
+    public final override fun setName(name: Name?): Self {
+      this.name = name
+      return this as Self
+    }
+
+    @Suppress("BuilderSetStyle")
+    public final override fun equals(other: Any?): Boolean {
+      if (this === other) return true
+      if (other == null || this::class.java != other::class.java) return false
+      other as Self
+      if (email != other.email) return false
+      if (disambiguatingDescription != other.disambiguatingDescription) return false
+      if (identifier != other.identifier) return false
+      if (name != other.name) return false
+      if (additionalProperties != other.additionalProperties) return false
+      return true
+    }
+
+    @Suppress("BuilderSetStyle")
+    public final override fun hashCode(): Int =
+      Objects.hash(email, disambiguatingDescription, identifier, name, additionalProperties)
+
+    @Suppress("BuilderSetStyle")
+    public final override fun toString(): String {
+      val attributes = mutableMapOf<String, String>()
+      if (email != null) {
+        attributes["email"] = email!!
+      }
+      if (disambiguatingDescription != null) {
+        attributes["disambiguatingDescription"] =
+          disambiguatingDescription!!.toString(includeWrapperName = false)
+      }
+      if (identifier != null) {
+        attributes["identifier"] = identifier!!
+      }
+      if (name != null) {
+        attributes["name"] = name!!.toString(includeWrapperName = false)
+      }
+      attributes += additionalProperties.map { (k, v) -> k to v.toString() }
+      val commaSeparated =
+        attributes.entries.joinToString(separator = ", ") { (k, v) -> """$k=$v""" }
+      return """$selfTypeName($commaSeparated)"""
+    }
+  }
+}
+
+internal class PersonImpl : GenericPerson<PersonImpl, PersonImpl.Builder> {
+  protected override val selfTypeName: String
+    get() = "Person"
+
+  protected override val additionalProperties: Map<String, Any?>
+    get() = emptyMap()
+
+  public constructor(
+    email: String?,
+    disambiguatingDescription: DisambiguatingDescription?,
+    identifier: String?,
+    name: Name?,
+  ) : super(email, disambiguatingDescription, identifier, name)
+
+  public constructor(person: Person) : super(person)
+
+  protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
+
+  internal class Builder : GenericPerson.Builder<Builder, PersonImpl>() {
+    protected override val selfTypeName: String
+      get() = "Person.Builder"
+
+    protected override val additionalProperties: Map<String, Any?>
+      get() = emptyMap()
+
+    protected override fun buildFromPerson(person: Person): PersonImpl =
+      person as? PersonImpl ?: PersonImpl(person)
+  }
+}
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Schedule.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Schedule.kt
new file mode 100644
index 0000000..216380d
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Schedule.kt
@@ -0,0 +1,892 @@
+// Copyright 2023 The Android Open Source Project
+//
+// 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 androidx.appactions.builtintypes.types
+
+import androidx.appactions.builtintypes.properties.ByDay
+import androidx.appactions.builtintypes.properties.DisambiguatingDescription
+import androidx.appactions.builtintypes.properties.EndDate
+import androidx.appactions.builtintypes.properties.EndTime
+import androidx.appactions.builtintypes.properties.ExceptDate
+import androidx.appactions.builtintypes.properties.Name
+import androidx.appactions.builtintypes.properties.RepeatFrequency
+import androidx.appactions.builtintypes.properties.StartDate
+import androidx.appactions.builtintypes.properties.StartTime
+import java.time.Duration
+import java.time.LocalDate
+import java.time.LocalDateTime
+import java.time.LocalTime
+import java.time.ZonedDateTime
+import java.util.Objects
+import kotlin.Any
+import kotlin.Boolean
+import kotlin.Int
+import kotlin.Long
+import kotlin.String
+import kotlin.Suppress
+import kotlin.collections.Iterable
+import kotlin.collections.List
+import kotlin.collections.Map
+import kotlin.collections.MutableList
+import kotlin.collections.emptyMap
+import kotlin.collections.isNotEmpty
+import kotlin.collections.joinToString
+import kotlin.collections.map
+import kotlin.collections.mutableListOf
+import kotlin.collections.mutableMapOf
+import kotlin.collections.plusAssign
+import kotlin.collections.toList
+import kotlin.jvm.JvmStatic
+
+/**
+ * A schedule defines a repeating time period used to describe a regularly occurring `Event`. At a
+ * minimum a schedule will specify `repeatFrequency` which describes the interval between
+ * occurrences of the event. Additional information can be provided to specify the schedule more
+ * precisely. This includes identifying the day(s) of the week or month when the recurring event
+ * will take place, in addition to its start and end time. Schedules may also have start and end
+ * dates to indicate when they are active, e.g. to define a limited calendar of events.
+ *
+ * See http://schema.org/Schedule for context.
+ *
+ * Should not be directly implemented. More properties may be added over time. Instead consider
+ * using [Companion.Builder] or see [GenericSchedule] if you need to extend this type.
+ */
+public interface Schedule : Intangible {
+  /** Defines the day(s) of the week on which a recurring Event takes place. */
+  public val byDays: List<ByDay>
+
+  /**
+   * Defines the month(s) of the year on which a recurring Event takes place. Specified as an
+   * Integer between 1-12. January is 1.
+   */
+  public val byMonths: List<Long>
+
+  /**
+   * Defines the day(s) of the month on which a recurring Event takes place. Specified as an Integer
+   * between 1-31.
+   */
+  public val byMonthDays: List<Long>
+
+  /**
+   * Defines the week(s) of the month on which a recurring Event takes place. Specified as an
+   * Integer between 1-5. For clarity, byMonthWeek is best used in conjunction with byDay to
+   * indicate concepts like the first and third Mondays of a month.
+   */
+  public val byMonthWeeks: List<Long>
+
+  /** The end date and time of the item. */
+  public val endDate: EndDate?
+
+  /**
+   * The endTime of something.
+   *
+   * For a reserved event or service (e.g. `FoodEstablishmentReservation`), the time that it is
+   * expected to end. For actions that span a period of time, when the action was performed. E.g.
+   * John wrote a book from January to *December*. For media, including audio and video, it's the
+   * time offset of the end of a clip within a larger file.
+   */
+  public val endTime: EndTime?
+
+  /**
+   * Defines a `Date` or `DateTime` during which a scheduled `Event` will not take place. The
+   * property allows exceptions to a `Schedule` to be specified. If an exception is specified as a
+   * `DateTime` then only the event that would have started at that specific date and time should be
+   * excluded from the schedule. If an exception is specified as a `Date` then any event that is
+   * scheduled for that 24 hour period should be excluded from the schedule. This allows a whole day
+   * to be excluded from the schedule without having to itemise every scheduled event.
+   */
+  public val exceptDate: ExceptDate?
+
+  /** Defines the number of times a recurring `Event` will take place. */
+  @get:Suppress("AutoBoxing") public val repeatCount: Long?
+
+  /**
+   * Defines the frequency at which `Event`s will occur according to a schedule `Schedule`. The
+   * intervals between events should be defined as a `Duration` of time.
+   */
+  public val repeatFrequency: RepeatFrequency?
+
+  /**
+   * Indicates the timezone for which the time(s) indicated in the `Schedule` are given. The value
+   * provided should be among those listed in the IANA Time Zone Database.
+   */
+  public val scheduleTimezone: String?
+
+  /** The start date and time of the item. */
+  public val startDate: StartDate?
+
+  /**
+   * The startTime of something.
+   *
+   * For a reserved event or service (e.g. `FoodEstablishmentReservation`), the time that it is
+   * expected to start. For actions that span a period of time, when the action was performed. E.g.
+   * John wrote a book from *January* to December. For media, including audio and video, it's the
+   * time offset of the start of a clip within a larger file.
+   */
+  public val startTime: StartTime?
+
+  /** Converts this [Schedule] to its builder with all the properties copied over. */
+  public override fun toBuilder(): Builder<*>
+
+  public companion object {
+    /** Returns a default implementation of [Builder] with no properties set. */
+    @JvmStatic public fun Builder(): Builder<*> = ScheduleImpl.Builder()
+  }
+
+  /**
+   * Builder for [Schedule].
+   *
+   * Should not be directly implemented. More methods may be added over time. See
+   * [GenericSchedule.Builder] if you need to extend this builder.
+   */
+  public interface Builder<Self : Builder<Self>> : Intangible.Builder<Self> {
+    /** Returns a built [Schedule]. */
+    public override fun build(): Schedule
+
+    /** Appends [String] as a value to `byDays`. */
+    public fun addByDay(text: String): Self = addByDay(ByDay(text))
+
+    /** Appends [DayOfWeek] as a value to `byDays`. */
+    public fun addByDay(dayOfWeek: DayOfWeek): Self = addByDay(ByDay(dayOfWeek))
+
+    /** Appends a value to `byDays`. */
+    public fun addByDay(byDay: ByDay): Self
+
+    /** Appends multiple values to `byDays`. */
+    public fun addByDays(values: Iterable<ByDay>): Self
+
+    /** Clears `byDays`. */
+    public fun clearByDays(): Self
+
+    /** Appends a value to `byMonths`. */
+    public fun addByMonth(integer: Long): Self
+
+    /** Appends multiple values to `byMonths`. */
+    public fun addByMonths(values: Iterable<Long>): Self
+
+    /** Clears `byMonths`. */
+    public fun clearByMonths(): Self
+
+    /** Appends a value to `byMonthDays`. */
+    public fun addByMonthDay(integer: Long): Self
+
+    /** Appends multiple values to `byMonthDays`. */
+    public fun addByMonthDays(values: Iterable<Long>): Self
+
+    /** Clears `byMonthDays`. */
+    public fun clearByMonthDays(): Self
+
+    /** Appends a value to `byMonthWeeks`. */
+    public fun addByMonthWeek(integer: Long): Self
+
+    /** Appends multiple values to `byMonthWeeks`. */
+    public fun addByMonthWeeks(values: Iterable<Long>): Self
+
+    /** Clears `byMonthWeeks`. */
+    public fun clearByMonthWeeks(): Self
+
+    /** Sets the `endDate` to [LocalDate]. */
+    public fun setEndDate(date: LocalDate): Self = setEndDate(EndDate(date))
+
+    /** Sets the `endDate` to [LocalDateTime]. */
+    public fun setEndDate(localDateTime: LocalDateTime): Self = setEndDate(EndDate(localDateTime))
+
+    /** Sets the `endDate` to [ZonedDateTime]. */
+    public fun setEndDate(zonedDateTime: ZonedDateTime): Self = setEndDate(EndDate(zonedDateTime))
+
+    /** Sets the `endDate`. */
+    public fun setEndDate(endDate: EndDate?): Self
+
+    /** Sets the `endTime` to [LocalTime]. */
+    public fun setEndTime(time: LocalTime): Self = setEndTime(EndTime(time))
+
+    /** Sets the `endTime` to [LocalDateTime]. */
+    public fun setEndTime(localDateTime: LocalDateTime): Self = setEndTime(EndTime(localDateTime))
+
+    /** Sets the `endTime` to [ZonedDateTime]. */
+    public fun setEndTime(zonedDateTime: ZonedDateTime): Self = setEndTime(EndTime(zonedDateTime))
+
+    /** Sets the `endTime`. */
+    public fun setEndTime(endTime: EndTime?): Self
+
+    /** Sets the `exceptDate` to [LocalDate]. */
+    public fun setExceptDate(date: LocalDate): Self = setExceptDate(ExceptDate(date))
+
+    /** Sets the `exceptDate` to [LocalDateTime]. */
+    public fun setExceptDate(localDateTime: LocalDateTime): Self =
+      setExceptDate(ExceptDate(localDateTime))
+
+    /** Sets the `exceptDate` to [ZonedDateTime]. */
+    public fun setExceptDate(zonedDateTime: ZonedDateTime): Self =
+      setExceptDate(ExceptDate(zonedDateTime))
+
+    /** Sets the `exceptDate`. */
+    public fun setExceptDate(exceptDate: ExceptDate?): Self
+
+    /** Sets the `repeatCount`. */
+    public fun setRepeatCount(@Suppress("AutoBoxing") integer: Long?): Self
+
+    /** Sets the `repeatFrequency` to [Duration]. */
+    public fun setRepeatFrequency(duration: Duration): Self =
+      setRepeatFrequency(RepeatFrequency(duration))
+
+    /** Sets the `repeatFrequency` to [String]. */
+    public fun setRepeatFrequency(text: String): Self = setRepeatFrequency(RepeatFrequency(text))
+
+    /** Sets the `repeatFrequency`. */
+    public fun setRepeatFrequency(repeatFrequency: RepeatFrequency?): Self
+
+    /** Sets the `scheduleTimezone`. */
+    public fun setScheduleTimezone(text: String?): Self
+
+    /** Sets the `startDate` to [LocalDate]. */
+    public fun setStartDate(date: LocalDate): Self = setStartDate(StartDate(date))
+
+    /** Sets the `startDate` to [LocalDateTime]. */
+    public fun setStartDate(localDateTime: LocalDateTime): Self =
+      setStartDate(StartDate(localDateTime))
+
+    /** Sets the `startDate` to [ZonedDateTime]. */
+    public fun setStartDate(zonedDateTime: ZonedDateTime): Self =
+      setStartDate(StartDate(zonedDateTime))
+
+    /** Sets the `startDate`. */
+    public fun setStartDate(startDate: StartDate?): Self
+
+    /** Sets the `startTime` to [LocalTime]. */
+    public fun setStartTime(time: LocalTime): Self = setStartTime(StartTime(time))
+
+    /** Sets the `startTime` to [LocalDateTime]. */
+    public fun setStartTime(localDateTime: LocalDateTime): Self =
+      setStartTime(StartTime(localDateTime))
+
+    /** Sets the `startTime` to [ZonedDateTime]. */
+    public fun setStartTime(zonedDateTime: ZonedDateTime): Self =
+      setStartTime(StartTime(zonedDateTime))
+
+    /** Sets the `startTime`. */
+    public fun setStartTime(startTime: StartTime?): Self
+  }
+}
+
+/**
+ * A generic implementation of [Schedule].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MySchedule internal constructor(
+ *   schedule: Schedule,
+ *   val foo: String,
+ *   val bars: List<Int>,
+ * ) : GenericSchedule<
+ *   MySchedule,
+ *   MySchedule.Builder
+ * >(schedule) {
+ *
+ *   override val selfTypeName =
+ *     "MySchedule"
+ *
+ *   override val additionalProperties: Map<String, Any?>
+ *     get() = mapOf("foo" to foo, "bars" to bars)
+ *
+ *   override fun toBuilderWithAdditionalPropertiesOnly(): Builder {
+ *     return Builder()
+ *       .setFoo(foo)
+ *       .addBars(bars)
+ *   }
+ *
+ *   class Builder :
+ *     GenericSchedule.Builder<
+ *       Builder,
+ *       MySchedule> {...}
+ * }
+ * ```
+ *
+ * Also see [GenericSchedule.Builder].
+ */
+@Suppress("UNCHECKED_CAST")
+public abstract class GenericSchedule<
+  Self : GenericSchedule<Self, Builder>, Builder : GenericSchedule.Builder<Builder, Self>>
+internal constructor(
+  public final override val byDays: List<ByDay>,
+  public final override val byMonths: List<Long>,
+  public final override val byMonthDays: List<Long>,
+  public final override val byMonthWeeks: List<Long>,
+  public final override val endDate: EndDate?,
+  public final override val endTime: EndTime?,
+  public final override val exceptDate: ExceptDate?,
+  @get:Suppress("AutoBoxing") public final override val repeatCount: Long?,
+  public final override val repeatFrequency: RepeatFrequency?,
+  public final override val scheduleTimezone: String?,
+  public final override val startDate: StartDate?,
+  public final override val startTime: StartTime?,
+  public final override val disambiguatingDescription: DisambiguatingDescription?,
+  public final override val identifier: String?,
+  public final override val name: Name?,
+) : Schedule {
+  /**
+   * Human readable name for the concrete [Self] class.
+   *
+   * Used in the [toString] output.
+   */
+  protected abstract val selfTypeName: String
+
+  /**
+   * The additional properties that exist on the concrete [Self] class.
+   *
+   * Used for equality comparison and computing the hash code.
+   */
+  protected abstract val additionalProperties: Map<String, Any?>
+
+  /** A copy-constructor that copies over properties from another [Schedule] instance. */
+  public constructor(
+    schedule: Schedule
+  ) : this(
+    schedule.byDays,
+    schedule.byMonths,
+    schedule.byMonthDays,
+    schedule.byMonthWeeks,
+    schedule.endDate,
+    schedule.endTime,
+    schedule.exceptDate,
+    schedule.repeatCount,
+    schedule.repeatFrequency,
+    schedule.scheduleTimezone,
+    schedule.startDate,
+    schedule.startTime,
+    schedule.disambiguatingDescription,
+    schedule.identifier,
+    schedule.name
+  )
+
+  /** Returns a concrete [Builder] with the additional, non-[Schedule] properties copied over. */
+  protected abstract fun toBuilderWithAdditionalPropertiesOnly(): Builder
+
+  public final override fun toBuilder(): Builder =
+    toBuilderWithAdditionalPropertiesOnly()
+      .addByDays(byDays)
+      .addByMonths(byMonths)
+      .addByMonthDays(byMonthDays)
+      .addByMonthWeeks(byMonthWeeks)
+      .setEndDate(endDate)
+      .setEndTime(endTime)
+      .setExceptDate(exceptDate)
+      .setRepeatCount(repeatCount)
+      .setRepeatFrequency(repeatFrequency)
+      .setScheduleTimezone(scheduleTimezone)
+      .setStartDate(startDate)
+      .setStartTime(startTime)
+      .setDisambiguatingDescription(disambiguatingDescription)
+      .setIdentifier(identifier)
+      .setName(name)
+
+  public final override fun equals(other: Any?): Boolean {
+    if (this === other) return true
+    if (other == null || this::class.java != other::class.java) return false
+    other as Self
+    if (byDays != other.byDays) return false
+    if (byMonths != other.byMonths) return false
+    if (byMonthDays != other.byMonthDays) return false
+    if (byMonthWeeks != other.byMonthWeeks) return false
+    if (endDate != other.endDate) return false
+    if (endTime != other.endTime) return false
+    if (exceptDate != other.exceptDate) return false
+    if (repeatCount != other.repeatCount) return false
+    if (repeatFrequency != other.repeatFrequency) return false
+    if (scheduleTimezone != other.scheduleTimezone) return false
+    if (startDate != other.startDate) return false
+    if (startTime != other.startTime) return false
+    if (disambiguatingDescription != other.disambiguatingDescription) return false
+    if (identifier != other.identifier) return false
+    if (name != other.name) return false
+    if (additionalProperties != other.additionalProperties) return false
+    return true
+  }
+
+  public final override fun hashCode(): Int =
+    Objects.hash(
+      byDays,
+      byMonths,
+      byMonthDays,
+      byMonthWeeks,
+      endDate,
+      endTime,
+      exceptDate,
+      repeatCount,
+      repeatFrequency,
+      scheduleTimezone,
+      startDate,
+      startTime,
+      disambiguatingDescription,
+      identifier,
+      name,
+      additionalProperties
+    )
+
+  public final override fun toString(): String {
+    val attributes = mutableMapOf<String, String>()
+    if (byDays.isNotEmpty()) {
+      attributes["byDays"] = byDays.map { it.toString(includeWrapperName = false) }.toString()
+    }
+    if (byMonths.isNotEmpty()) {
+      attributes["byMonths"] = byMonths.toString()
+    }
+    if (byMonthDays.isNotEmpty()) {
+      attributes["byMonthDays"] = byMonthDays.toString()
+    }
+    if (byMonthWeeks.isNotEmpty()) {
+      attributes["byMonthWeeks"] = byMonthWeeks.toString()
+    }
+    if (endDate != null) {
+      attributes["endDate"] = endDate.toString(includeWrapperName = false)
+    }
+    if (endTime != null) {
+      attributes["endTime"] = endTime.toString(includeWrapperName = false)
+    }
+    if (exceptDate != null) {
+      attributes["exceptDate"] = exceptDate.toString(includeWrapperName = false)
+    }
+    if (repeatCount != null) {
+      attributes["repeatCount"] = repeatCount.toString()
+    }
+    if (repeatFrequency != null) {
+      attributes["repeatFrequency"] = repeatFrequency.toString(includeWrapperName = false)
+    }
+    if (scheduleTimezone != null) {
+      attributes["scheduleTimezone"] = scheduleTimezone
+    }
+    if (startDate != null) {
+      attributes["startDate"] = startDate.toString(includeWrapperName = false)
+    }
+    if (startTime != null) {
+      attributes["startTime"] = startTime.toString(includeWrapperName = false)
+    }
+    if (disambiguatingDescription != null) {
+      attributes["disambiguatingDescription"] =
+        disambiguatingDescription.toString(includeWrapperName = false)
+    }
+    if (identifier != null) {
+      attributes["identifier"] = identifier
+    }
+    if (name != null) {
+      attributes["name"] = name.toString(includeWrapperName = false)
+    }
+    attributes += additionalProperties.map { (k, v) -> k to v.toString() }
+    val commaSeparated = attributes.entries.joinToString(separator = ", ") { (k, v) -> """$k=$v""" }
+    return """$selfTypeName($commaSeparated)"""
+  }
+
+  /**
+   * A generic implementation of [Schedule.Builder].
+   *
+   * Allows for extension like:
+   * ```kt
+   * class MySchedule :
+   *   : GenericSchedule<
+   *     MySchedule,
+   *     MySchedule.Builder>(...) {
+   *
+   *   class Builder
+   *   : Builder<
+   *       Builder,
+   *       MySchedule
+   *   >() {
+   *     private var foo: String? = null
+   *     private val bars = mutableListOf<Int>()
+   *
+   *     override val selfTypeName =
+   *       "MySchedule.Builder"
+   *
+   *     override val additionalProperties: Map<String, Any?>
+   *       get() = mapOf("foo" to foo, "bars" to bars)
+   *
+   *     override fun buildFromSchedule(
+   *       schedule: Schedule
+   *     ): MySchedule {
+   *       return MySchedule(
+   *         schedule,
+   *         foo,
+   *         bars.toList()
+   *       )
+   *     }
+   *
+   *     fun setFoo(string: String): Builder {
+   *       return apply { foo = string }
+   *     }
+   *
+   *     fun addBar(int: Int): Builder {
+   *       return apply { bars += int }
+   *     }
+   *
+   *     fun addBars(values: Iterable<Int>): Builder {
+   *       return apply { bars += values }
+   *     }
+   *   }
+   * }
+   * ```
+   *
+   * Also see [GenericSchedule].
+   */
+  @Suppress("StaticFinalBuilder")
+  public abstract class Builder<Self : Builder<Self, Built>, Built : GenericSchedule<Built, Self>> :
+    Schedule.Builder<Self> {
+    /**
+     * Human readable name for the concrete [Self] class.
+     *
+     * Used in the [toString] output.
+     */
+    @get:Suppress("GetterOnBuilder") protected abstract val selfTypeName: String
+
+    /**
+     * The additional properties that exist on the concrete [Self] class.
+     *
+     * Used for equality comparison and computing the hash code.
+     */
+    @get:Suppress("GetterOnBuilder") protected abstract val additionalProperties: Map<String, Any?>
+
+    private val byDays: MutableList<ByDay> = mutableListOf()
+
+    private val byMonths: MutableList<Long> = mutableListOf()
+
+    private val byMonthDays: MutableList<Long> = mutableListOf()
+
+    private val byMonthWeeks: MutableList<Long> = mutableListOf()
+
+    private var endDate: EndDate? = null
+
+    private var endTime: EndTime? = null
+
+    private var exceptDate: ExceptDate? = null
+
+    @get:Suppress("AutoBoxing") private var repeatCount: Long? = null
+
+    private var repeatFrequency: RepeatFrequency? = null
+
+    private var scheduleTimezone: String? = null
+
+    private var startDate: StartDate? = null
+
+    private var startTime: StartTime? = null
+
+    private var disambiguatingDescription: DisambiguatingDescription? = null
+
+    private var identifier: String? = null
+
+    private var name: Name? = null
+
+    /**
+     * Builds a concrete [Built] instance, given a built [Schedule].
+     *
+     * Subclasses should override this method to build a concrete [Built] instance that holds both
+     * the [Schedule]-specific properties and the subclass specific [additionalProperties].
+     *
+     * See the sample code in the documentation of this class for more context.
+     */
+    @Suppress("BuilderSetStyle") protected abstract fun buildFromSchedule(schedule: Schedule): Built
+
+    public final override fun build(): Built =
+      buildFromSchedule(
+        ScheduleImpl(
+          byDays.toList(),
+          byMonths.toList(),
+          byMonthDays.toList(),
+          byMonthWeeks.toList(),
+          endDate,
+          endTime,
+          exceptDate,
+          repeatCount,
+          repeatFrequency,
+          scheduleTimezone,
+          startDate,
+          startTime,
+          disambiguatingDescription,
+          identifier,
+          name
+        )
+      )
+
+    public final override fun addByDay(byDay: ByDay): Self {
+      byDays += byDay
+      return this as Self
+    }
+
+    public final override fun addByDays(values: Iterable<ByDay>): Self {
+      byDays += values
+      return this as Self
+    }
+
+    public final override fun clearByDays(): Self {
+      byDays.clear()
+      return this as Self
+    }
+
+    public final override fun addByMonth(integer: Long): Self {
+      byMonths += integer
+      return this as Self
+    }
+
+    public final override fun addByMonths(values: Iterable<Long>): Self {
+      byMonths += values
+      return this as Self
+    }
+
+    public final override fun clearByMonths(): Self {
+      byMonths.clear()
+      return this as Self
+    }
+
+    public final override fun addByMonthDay(integer: Long): Self {
+      byMonthDays += integer
+      return this as Self
+    }
+
+    public final override fun addByMonthDays(values: Iterable<Long>): Self {
+      byMonthDays += values
+      return this as Self
+    }
+
+    public final override fun clearByMonthDays(): Self {
+      byMonthDays.clear()
+      return this as Self
+    }
+
+    public final override fun addByMonthWeek(integer: Long): Self {
+      byMonthWeeks += integer
+      return this as Self
+    }
+
+    public final override fun addByMonthWeeks(values: Iterable<Long>): Self {
+      byMonthWeeks += values
+      return this as Self
+    }
+
+    public final override fun clearByMonthWeeks(): Self {
+      byMonthWeeks.clear()
+      return this as Self
+    }
+
+    public final override fun setEndDate(endDate: EndDate?): Self {
+      this.endDate = endDate
+      return this as Self
+    }
+
+    public final override fun setEndTime(endTime: EndTime?): Self {
+      this.endTime = endTime
+      return this as Self
+    }
+
+    public final override fun setExceptDate(exceptDate: ExceptDate?): Self {
+      this.exceptDate = exceptDate
+      return this as Self
+    }
+
+    public final override fun setRepeatCount(@Suppress("AutoBoxing") integer: Long?): Self {
+      this.repeatCount = integer
+      return this as Self
+    }
+
+    public final override fun setRepeatFrequency(repeatFrequency: RepeatFrequency?): Self {
+      this.repeatFrequency = repeatFrequency
+      return this as Self
+    }
+
+    public final override fun setScheduleTimezone(text: String?): Self {
+      this.scheduleTimezone = text
+      return this as Self
+    }
+
+    public final override fun setStartDate(startDate: StartDate?): Self {
+      this.startDate = startDate
+      return this as Self
+    }
+
+    public final override fun setStartTime(startTime: StartTime?): Self {
+      this.startTime = startTime
+      return this as Self
+    }
+
+    public final override fun setDisambiguatingDescription(
+      disambiguatingDescription: DisambiguatingDescription?
+    ): Self {
+      this.disambiguatingDescription = disambiguatingDescription
+      return this as Self
+    }
+
+    public final override fun setIdentifier(text: String?): Self {
+      this.identifier = text
+      return this as Self
+    }
+
+    public final override fun setName(name: Name?): Self {
+      this.name = name
+      return this as Self
+    }
+
+    @Suppress("BuilderSetStyle")
+    public final override fun equals(other: Any?): Boolean {
+      if (this === other) return true
+      if (other == null || this::class.java != other::class.java) return false
+      other as Self
+      if (byDays != other.byDays) return false
+      if (byMonths != other.byMonths) return false
+      if (byMonthDays != other.byMonthDays) return false
+      if (byMonthWeeks != other.byMonthWeeks) return false
+      if (endDate != other.endDate) return false
+      if (endTime != other.endTime) return false
+      if (exceptDate != other.exceptDate) return false
+      if (repeatCount != other.repeatCount) return false
+      if (repeatFrequency != other.repeatFrequency) return false
+      if (scheduleTimezone != other.scheduleTimezone) return false
+      if (startDate != other.startDate) return false
+      if (startTime != other.startTime) return false
+      if (disambiguatingDescription != other.disambiguatingDescription) return false
+      if (identifier != other.identifier) return false
+      if (name != other.name) return false
+      if (additionalProperties != other.additionalProperties) return false
+      return true
+    }
+
+    @Suppress("BuilderSetStyle")
+    public final override fun hashCode(): Int =
+      Objects.hash(
+        byDays,
+        byMonths,
+        byMonthDays,
+        byMonthWeeks,
+        endDate,
+        endTime,
+        exceptDate,
+        repeatCount,
+        repeatFrequency,
+        scheduleTimezone,
+        startDate,
+        startTime,
+        disambiguatingDescription,
+        identifier,
+        name,
+        additionalProperties
+      )
+
+    @Suppress("BuilderSetStyle")
+    public final override fun toString(): String {
+      val attributes = mutableMapOf<String, String>()
+      if (byDays.isNotEmpty()) {
+        attributes["byDays"] = byDays.map { it.toString(includeWrapperName = false) }.toString()
+      }
+      if (byMonths.isNotEmpty()) {
+        attributes["byMonths"] = byMonths.toString()
+      }
+      if (byMonthDays.isNotEmpty()) {
+        attributes["byMonthDays"] = byMonthDays.toString()
+      }
+      if (byMonthWeeks.isNotEmpty()) {
+        attributes["byMonthWeeks"] = byMonthWeeks.toString()
+      }
+      if (endDate != null) {
+        attributes["endDate"] = endDate!!.toString(includeWrapperName = false)
+      }
+      if (endTime != null) {
+        attributes["endTime"] = endTime!!.toString(includeWrapperName = false)
+      }
+      if (exceptDate != null) {
+        attributes["exceptDate"] = exceptDate!!.toString(includeWrapperName = false)
+      }
+      if (repeatCount != null) {
+        attributes["repeatCount"] = repeatCount!!.toString()
+      }
+      if (repeatFrequency != null) {
+        attributes["repeatFrequency"] = repeatFrequency!!.toString(includeWrapperName = false)
+      }
+      if (scheduleTimezone != null) {
+        attributes["scheduleTimezone"] = scheduleTimezone!!
+      }
+      if (startDate != null) {
+        attributes["startDate"] = startDate!!.toString(includeWrapperName = false)
+      }
+      if (startTime != null) {
+        attributes["startTime"] = startTime!!.toString(includeWrapperName = false)
+      }
+      if (disambiguatingDescription != null) {
+        attributes["disambiguatingDescription"] =
+          disambiguatingDescription!!.toString(includeWrapperName = false)
+      }
+      if (identifier != null) {
+        attributes["identifier"] = identifier!!
+      }
+      if (name != null) {
+        attributes["name"] = name!!.toString(includeWrapperName = false)
+      }
+      attributes += additionalProperties.map { (k, v) -> k to v.toString() }
+      val commaSeparated =
+        attributes.entries.joinToString(separator = ", ") { (k, v) -> """$k=$v""" }
+      return """$selfTypeName($commaSeparated)"""
+    }
+  }
+}
+
+internal class ScheduleImpl : GenericSchedule<ScheduleImpl, ScheduleImpl.Builder> {
+  protected override val selfTypeName: String
+    get() = "Schedule"
+
+  protected override val additionalProperties: Map<String, Any?>
+    get() = emptyMap()
+
+  public constructor(
+    byDays: List<ByDay>,
+    byMonths: List<Long>,
+    byMonthDays: List<Long>,
+    byMonthWeeks: List<Long>,
+    endDate: EndDate?,
+    endTime: EndTime?,
+    exceptDate: ExceptDate?,
+    repeatCount: Long?,
+    repeatFrequency: RepeatFrequency?,
+    scheduleTimezone: String?,
+    startDate: StartDate?,
+    startTime: StartTime?,
+    disambiguatingDescription: DisambiguatingDescription?,
+    identifier: String?,
+    name: Name?,
+  ) : super(
+    byDays,
+    byMonths,
+    byMonthDays,
+    byMonthWeeks,
+    endDate,
+    endTime,
+    exceptDate,
+    repeatCount,
+    repeatFrequency,
+    scheduleTimezone,
+    startDate,
+    startTime,
+    disambiguatingDescription,
+    identifier,
+    name
+  )
+
+  public constructor(schedule: Schedule) : super(schedule)
+
+  protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
+
+  internal class Builder : GenericSchedule.Builder<Builder, ScheduleImpl>() {
+    protected override val selfTypeName: String
+      get() = "Schedule.Builder"
+
+    protected override val additionalProperties: Map<String, Any?>
+      get() = emptyMap()
+
+    protected override fun buildFromSchedule(schedule: Schedule): ScheduleImpl =
+      schedule as? ScheduleImpl ?: ScheduleImpl(schedule)
+  }
+}
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Thing.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Thing.kt
index 90bb78e..3080c42 100644
--- a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Thing.kt
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Thing.kt
@@ -13,12 +13,8 @@
 // limitations under the License.
 package androidx.appactions.builtintypes.types
 
-import androidx.appactions.builtintypes.properties.Description
 import androidx.appactions.builtintypes.properties.DisambiguatingDescription
 import androidx.appactions.builtintypes.properties.Name
-import androidx.appactions.builtintypes.properties.Temporal
-import java.time.LocalDateTime
-import java.time.ZonedDateTime
 import java.util.Objects
 import kotlin.Any
 import kotlin.Boolean
@@ -31,7 +27,6 @@
 import kotlin.collections.map
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
-import kotlin.jvm.JvmField
 import kotlin.jvm.JvmStatic
 
 /**
@@ -43,9 +38,6 @@
  * using [Companion.Builder] or see [GenericThing] if you need to extend this type.
  */
 public interface Thing {
-  /** A description of the item. */
-  public val description: Description?
-
   /**
    * A sub property of description. A short description of the item used to disambiguate from other,
    * similar items. Information from other properties (in particular, name) may be necessary for the
@@ -62,12 +54,6 @@
   /** The name of the item. */
   public val name: Name?
 
-  /**
-   * Can be used in cases where more specific properties (e.g. temporalCoverage, dateCreated,
-   * dateModified, datePublished) are not known to be appropriate.
-   */
-  public val temporal: Temporal?
-
   /** Converts this [Thing] to its builder with all the properties copied over. */
   public fun toBuilder(): Builder<*>
 
@@ -87,20 +73,10 @@
     /** Returns a built [Thing]. */
     public fun build(): Thing
 
-    /** Sets the `description` to [String]. */
-    public fun setDescription(text: String): Self = setDescription(Description(text))
-
-    /** Sets the `description`. */
-    public fun setDescription(description: Description?): Self
-
     /** Sets the `disambiguatingDescription` to [String]. */
     public fun setDisambiguatingDescription(text: String): Self =
       setDisambiguatingDescription(DisambiguatingDescription(text))
 
-    /** Sets the `disambiguatingDescription` to a canonical [DisambiguatingDescriptionValue]. */
-    public fun setDisambiguatingDescription(canonicalValue: DisambiguatingDescriptionValue): Self =
-      setDisambiguatingDescription(DisambiguatingDescription(canonicalValue))
-
     /** Sets the `disambiguatingDescription`. */
     public fun setDisambiguatingDescription(
       disambiguatingDescription: DisambiguatingDescription?
@@ -114,87 +90,6 @@
 
     /** Sets the `name`. */
     public fun setName(name: Name?): Self
-
-    /** Sets the `temporal` to [LocalDateTime]. */
-    public fun setTemporal(localDateTime: LocalDateTime): Self =
-      setTemporal(Temporal(localDateTime))
-
-    /** Sets the `temporal` to [ZonedDateTime]. */
-    public fun setTemporal(zonedDateTime: ZonedDateTime): Self =
-      setTemporal(Temporal(zonedDateTime))
-
-    /** Sets the `temporal` to [String]. */
-    public fun setTemporal(text: String): Self = setTemporal(Temporal(text))
-
-    /** Sets the `temporal`. */
-    public fun setTemporal(temporal: Temporal?): Self
-  }
-
-  /**
-   * A canonical value that may be assigned to [DisambiguatingDescription] properties in the context
-   * of [Thing].
-   *
-   * Represents an open enum. See [Companion] for the different possible variants. More variants may
-   * be added over time.
-   */
-  public class DisambiguatingDescriptionValue
-  private constructor(
-    public override val textValue: String,
-  ) : DisambiguatingDescription.CanonicalValue() {
-    public override fun toString(): String = """Thing.DisambiguatingDescriptionValue($textValue)"""
-
-    public companion object {
-      @JvmField
-      public val ALBUM: DisambiguatingDescriptionValue = DisambiguatingDescriptionValue("Album")
-
-      @JvmField
-      public val AUDIOBOOK: DisambiguatingDescriptionValue =
-        DisambiguatingDescriptionValue("Audiobook")
-
-      @JvmField
-      public val EPISODE: DisambiguatingDescriptionValue = DisambiguatingDescriptionValue("Episode")
-
-      @JvmField
-      public val MOVIE: DisambiguatingDescriptionValue = DisambiguatingDescriptionValue("Movie")
-
-      @JvmField
-      public val MUSIC: DisambiguatingDescriptionValue = DisambiguatingDescriptionValue("Music")
-
-      @JvmField
-      public val OTHER: DisambiguatingDescriptionValue = DisambiguatingDescriptionValue("Other")
-
-      @JvmField
-      public val PHOTOGRAPH: DisambiguatingDescriptionValue =
-        DisambiguatingDescriptionValue("Photograph")
-
-      @JvmField
-      public val PODCAST: DisambiguatingDescriptionValue = DisambiguatingDescriptionValue("Podcast")
-
-      @JvmField
-      public val SONG: DisambiguatingDescriptionValue = DisambiguatingDescriptionValue("Song")
-
-      @JvmField
-      public val SOUNDTRACK: DisambiguatingDescriptionValue =
-        DisambiguatingDescriptionValue("Soundtrack")
-
-      @JvmField
-      public val TELEVISION_CHANNEL: DisambiguatingDescriptionValue =
-        DisambiguatingDescriptionValue("Television channel")
-
-      @JvmField
-      public val TELEVISION_SHOW: DisambiguatingDescriptionValue =
-        DisambiguatingDescriptionValue("Television show")
-
-      @JvmField
-      public val TRAILER: DisambiguatingDescriptionValue = DisambiguatingDescriptionValue("Trailer")
-
-      @JvmField
-      public val VIDEO: DisambiguatingDescriptionValue = DisambiguatingDescriptionValue("Video")
-
-      @JvmField
-      public val VIDEO_GAME: DisambiguatingDescriptionValue =
-        DisambiguatingDescriptionValue("Video game")
-    }
   }
 }
 
@@ -237,11 +132,9 @@
 public abstract class GenericThing<
   Self : GenericThing<Self, Builder>, Builder : GenericThing.Builder<Builder, Self>>
 internal constructor(
-  public final override val description: Description?,
   public final override val disambiguatingDescription: DisambiguatingDescription?,
   public final override val identifier: String?,
   public final override val name: Name?,
-  public final override val temporal: Temporal?,
 ) : Thing {
   /**
    * Human readable name for the concrete [Self] class.
@@ -260,53 +153,33 @@
   /** A copy-constructor that copies over properties from another [Thing] instance. */
   public constructor(
     thing: Thing
-  ) : this(
-    thing.description,
-    thing.disambiguatingDescription,
-    thing.identifier,
-    thing.name,
-    thing.temporal
-  )
+  ) : this(thing.disambiguatingDescription, thing.identifier, thing.name)
 
   /** Returns a concrete [Builder] with the additional, non-[Thing] properties copied over. */
   protected abstract fun toBuilderWithAdditionalPropertiesOnly(): Builder
 
   public final override fun toBuilder(): Builder =
     toBuilderWithAdditionalPropertiesOnly()
-      .setDescription(description)
       .setDisambiguatingDescription(disambiguatingDescription)
       .setIdentifier(identifier)
       .setName(name)
-      .setTemporal(temporal)
 
   public final override fun equals(other: Any?): Boolean {
     if (this === other) return true
     if (other == null || this::class.java != other::class.java) return false
     other as Self
-    if (description != other.description) return false
     if (disambiguatingDescription != other.disambiguatingDescription) return false
     if (identifier != other.identifier) return false
     if (name != other.name) return false
-    if (temporal != other.temporal) return false
     if (additionalProperties != other.additionalProperties) return false
     return true
   }
 
   public final override fun hashCode(): Int =
-    Objects.hash(
-      description,
-      disambiguatingDescription,
-      identifier,
-      name,
-      temporal,
-      additionalProperties
-    )
+    Objects.hash(disambiguatingDescription, identifier, name, additionalProperties)
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    if (description != null) {
-      attributes["description"] = description.toString(includeWrapperName = false)
-    }
     if (disambiguatingDescription != null) {
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
@@ -317,9 +190,6 @@
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
-    if (temporal != null) {
-      attributes["temporal"] = temporal.toString(includeWrapperName = false)
-    }
     attributes += additionalProperties.map { (k, v) -> k to v.toString() }
     val commaSeparated = attributes.entries.joinToString(separator = ", ") { (k, v) -> """$k=$v""" }
     return """$selfTypeName($commaSeparated)"""
@@ -393,16 +263,12 @@
      */
     @get:Suppress("GetterOnBuilder") protected abstract val additionalProperties: Map<String, Any?>
 
-    private var description: Description? = null
-
     private var disambiguatingDescription: DisambiguatingDescription? = null
 
     private var identifier: String? = null
 
     private var name: Name? = null
 
-    private var temporal: Temporal? = null
-
     /**
      * Builds a concrete [Built] instance, given a built [Thing].
      *
@@ -414,12 +280,7 @@
     @Suppress("BuilderSetStyle") protected abstract fun buildFromThing(thing: Thing): Built
 
     public final override fun build(): Built =
-      buildFromThing(ThingImpl(description, disambiguatingDescription, identifier, name, temporal))
-
-    public final override fun setDescription(description: Description?): Self {
-      this.description = description
-      return this as Self
-    }
+      buildFromThing(ThingImpl(disambiguatingDescription, identifier, name))
 
     public final override fun setDisambiguatingDescription(
       disambiguatingDescription: DisambiguatingDescription?
@@ -438,42 +299,25 @@
       return this as Self
     }
 
-    public final override fun setTemporal(temporal: Temporal?): Self {
-      this.temporal = temporal
-      return this as Self
-    }
-
     @Suppress("BuilderSetStyle")
     public final override fun equals(other: Any?): Boolean {
       if (this === other) return true
       if (other == null || this::class.java != other::class.java) return false
       other as Self
-      if (description != other.description) return false
       if (disambiguatingDescription != other.disambiguatingDescription) return false
       if (identifier != other.identifier) return false
       if (name != other.name) return false
-      if (temporal != other.temporal) return false
       if (additionalProperties != other.additionalProperties) return false
       return true
     }
 
     @Suppress("BuilderSetStyle")
     public final override fun hashCode(): Int =
-      Objects.hash(
-        description,
-        disambiguatingDescription,
-        identifier,
-        name,
-        temporal,
-        additionalProperties
-      )
+      Objects.hash(disambiguatingDescription, identifier, name, additionalProperties)
 
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      if (description != null) {
-        attributes["description"] = description!!.toString(includeWrapperName = false)
-      }
       if (disambiguatingDescription != null) {
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
@@ -484,9 +328,6 @@
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
-      if (temporal != null) {
-        attributes["temporal"] = temporal!!.toString(includeWrapperName = false)
-      }
       attributes += additionalProperties.map { (k, v) -> k to v.toString() }
       val commaSeparated =
         attributes.entries.joinToString(separator = ", ") { (k, v) -> """$k=$v""" }
@@ -503,12 +344,10 @@
     get() = emptyMap()
 
   public constructor(
-    description: Description?,
     disambiguatingDescription: DisambiguatingDescription?,
     identifier: String?,
     name: Name?,
-    temporal: Temporal?,
-  ) : super(description, disambiguatingDescription, identifier, name, temporal)
+  ) : super(disambiguatingDescription, identifier, name)
 
   public constructor(thing: Thing) : super(thing)
 
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Timer.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Timer.kt
new file mode 100644
index 0000000..b9d5de4
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/Timer.kt
@@ -0,0 +1,356 @@
+// Copyright 2023 The Android Open Source Project
+//
+// 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 androidx.appactions.builtintypes.types
+
+import androidx.appactions.builtintypes.properties.DisambiguatingDescription
+import androidx.appactions.builtintypes.properties.Name
+import java.time.Duration
+import java.util.Objects
+import kotlin.Any
+import kotlin.Boolean
+import kotlin.Int
+import kotlin.String
+import kotlin.Suppress
+import kotlin.collections.Map
+import kotlin.collections.emptyMap
+import kotlin.collections.joinToString
+import kotlin.collections.map
+import kotlin.collections.mutableMapOf
+import kotlin.collections.plusAssign
+import kotlin.jvm.JvmStatic
+
+/**
+ * A timer to go off at a particular time.
+ *
+ * See http://schema.googleapis.com/Timer for context.
+ *
+ * Should not be directly implemented. More properties may be added over time. Instead consider
+ * using [Companion.Builder] or see [GenericTimer] if you need to extend this type.
+ */
+public interface Timer : Thing {
+  /** The duration of the item (movie, audio recording, event, etc.). */
+  public val duration: Duration?
+
+  /** Converts this [Timer] to its builder with all the properties copied over. */
+  public override fun toBuilder(): Builder<*>
+
+  public companion object {
+    /** Returns a default implementation of [Builder] with no properties set. */
+    @JvmStatic public fun Builder(): Builder<*> = TimerImpl.Builder()
+  }
+
+  /**
+   * Builder for [Timer].
+   *
+   * Should not be directly implemented. More methods may be added over time. See
+   * [GenericTimer.Builder] if you need to extend this builder.
+   */
+  public interface Builder<Self : Builder<Self>> : Thing.Builder<Self> {
+    /** Returns a built [Timer]. */
+    public override fun build(): Timer
+
+    /** Sets the `duration`. */
+    public fun setDuration(duration: Duration?): Self
+  }
+}
+
+/**
+ * A generic implementation of [Timer].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MyTimer internal constructor(
+ *   timer: Timer,
+ *   val foo: String,
+ *   val bars: List<Int>,
+ * ) : GenericTimer<
+ *   MyTimer,
+ *   MyTimer.Builder
+ * >(timer) {
+ *
+ *   override val selfTypeName =
+ *     "MyTimer"
+ *
+ *   override val additionalProperties: Map<String, Any?>
+ *     get() = mapOf("foo" to foo, "bars" to bars)
+ *
+ *   override fun toBuilderWithAdditionalPropertiesOnly(): Builder {
+ *     return Builder()
+ *       .setFoo(foo)
+ *       .addBars(bars)
+ *   }
+ *
+ *   class Builder :
+ *     GenericTimer.Builder<
+ *       Builder,
+ *       MyTimer> {...}
+ * }
+ * ```
+ *
+ * Also see [GenericTimer.Builder].
+ */
+@Suppress("UNCHECKED_CAST")
+public abstract class GenericTimer<
+  Self : GenericTimer<Self, Builder>, Builder : GenericTimer.Builder<Builder, Self>>
+internal constructor(
+  public final override val duration: Duration?,
+  public final override val disambiguatingDescription: DisambiguatingDescription?,
+  public final override val identifier: String?,
+  public final override val name: Name?,
+) : Timer {
+  /**
+   * Human readable name for the concrete [Self] class.
+   *
+   * Used in the [toString] output.
+   */
+  protected abstract val selfTypeName: String
+
+  /**
+   * The additional properties that exist on the concrete [Self] class.
+   *
+   * Used for equality comparison and computing the hash code.
+   */
+  protected abstract val additionalProperties: Map<String, Any?>
+
+  /** A copy-constructor that copies over properties from another [Timer] instance. */
+  public constructor(
+    timer: Timer
+  ) : this(timer.duration, timer.disambiguatingDescription, timer.identifier, timer.name)
+
+  /** Returns a concrete [Builder] with the additional, non-[Timer] properties copied over. */
+  protected abstract fun toBuilderWithAdditionalPropertiesOnly(): Builder
+
+  public final override fun toBuilder(): Builder =
+    toBuilderWithAdditionalPropertiesOnly()
+      .setDuration(duration)
+      .setDisambiguatingDescription(disambiguatingDescription)
+      .setIdentifier(identifier)
+      .setName(name)
+
+  public final override fun equals(other: Any?): Boolean {
+    if (this === other) return true
+    if (other == null || this::class.java != other::class.java) return false
+    other as Self
+    if (duration != other.duration) return false
+    if (disambiguatingDescription != other.disambiguatingDescription) return false
+    if (identifier != other.identifier) return false
+    if (name != other.name) return false
+    if (additionalProperties != other.additionalProperties) return false
+    return true
+  }
+
+  public final override fun hashCode(): Int =
+    Objects.hash(duration, disambiguatingDescription, identifier, name, additionalProperties)
+
+  public final override fun toString(): String {
+    val attributes = mutableMapOf<String, String>()
+    if (duration != null) {
+      attributes["duration"] = duration.toString()
+    }
+    if (disambiguatingDescription != null) {
+      attributes["disambiguatingDescription"] =
+        disambiguatingDescription.toString(includeWrapperName = false)
+    }
+    if (identifier != null) {
+      attributes["identifier"] = identifier
+    }
+    if (name != null) {
+      attributes["name"] = name.toString(includeWrapperName = false)
+    }
+    attributes += additionalProperties.map { (k, v) -> k to v.toString() }
+    val commaSeparated = attributes.entries.joinToString(separator = ", ") { (k, v) -> """$k=$v""" }
+    return """$selfTypeName($commaSeparated)"""
+  }
+
+  /**
+   * A generic implementation of [Timer.Builder].
+   *
+   * Allows for extension like:
+   * ```kt
+   * class MyTimer :
+   *   : GenericTimer<
+   *     MyTimer,
+   *     MyTimer.Builder>(...) {
+   *
+   *   class Builder
+   *   : Builder<
+   *       Builder,
+   *       MyTimer
+   *   >() {
+   *     private var foo: String? = null
+   *     private val bars = mutableListOf<Int>()
+   *
+   *     override val selfTypeName =
+   *       "MyTimer.Builder"
+   *
+   *     override val additionalProperties: Map<String, Any?>
+   *       get() = mapOf("foo" to foo, "bars" to bars)
+   *
+   *     override fun buildFromTimer(
+   *       timer: Timer
+   *     ): MyTimer {
+   *       return MyTimer(
+   *         timer,
+   *         foo,
+   *         bars.toList()
+   *       )
+   *     }
+   *
+   *     fun setFoo(string: String): Builder {
+   *       return apply { foo = string }
+   *     }
+   *
+   *     fun addBar(int: Int): Builder {
+   *       return apply { bars += int }
+   *     }
+   *
+   *     fun addBars(values: Iterable<Int>): Builder {
+   *       return apply { bars += values }
+   *     }
+   *   }
+   * }
+   * ```
+   *
+   * Also see [GenericTimer].
+   */
+  @Suppress("StaticFinalBuilder")
+  public abstract class Builder<Self : Builder<Self, Built>, Built : GenericTimer<Built, Self>> :
+    Timer.Builder<Self> {
+    /**
+     * Human readable name for the concrete [Self] class.
+     *
+     * Used in the [toString] output.
+     */
+    @get:Suppress("GetterOnBuilder") protected abstract val selfTypeName: String
+
+    /**
+     * The additional properties that exist on the concrete [Self] class.
+     *
+     * Used for equality comparison and computing the hash code.
+     */
+    @get:Suppress("GetterOnBuilder") protected abstract val additionalProperties: Map<String, Any?>
+
+    private var duration: Duration? = null
+
+    private var disambiguatingDescription: DisambiguatingDescription? = null
+
+    private var identifier: String? = null
+
+    private var name: Name? = null
+
+    /**
+     * Builds a concrete [Built] instance, given a built [Timer].
+     *
+     * Subclasses should override this method to build a concrete [Built] instance that holds both
+     * the [Timer]-specific properties and the subclass specific [additionalProperties].
+     *
+     * See the sample code in the documentation of this class for more context.
+     */
+    @Suppress("BuilderSetStyle") protected abstract fun buildFromTimer(timer: Timer): Built
+
+    public final override fun build(): Built =
+      buildFromTimer(TimerImpl(duration, disambiguatingDescription, identifier, name))
+
+    public final override fun setDuration(duration: Duration?): Self {
+      this.duration = duration
+      return this as Self
+    }
+
+    public final override fun setDisambiguatingDescription(
+      disambiguatingDescription: DisambiguatingDescription?
+    ): Self {
+      this.disambiguatingDescription = disambiguatingDescription
+      return this as Self
+    }
+
+    public final override fun setIdentifier(text: String?): Self {
+      this.identifier = text
+      return this as Self
+    }
+
+    public final override fun setName(name: Name?): Self {
+      this.name = name
+      return this as Self
+    }
+
+    @Suppress("BuilderSetStyle")
+    public final override fun equals(other: Any?): Boolean {
+      if (this === other) return true
+      if (other == null || this::class.java != other::class.java) return false
+      other as Self
+      if (duration != other.duration) return false
+      if (disambiguatingDescription != other.disambiguatingDescription) return false
+      if (identifier != other.identifier) return false
+      if (name != other.name) return false
+      if (additionalProperties != other.additionalProperties) return false
+      return true
+    }
+
+    @Suppress("BuilderSetStyle")
+    public final override fun hashCode(): Int =
+      Objects.hash(duration, disambiguatingDescription, identifier, name, additionalProperties)
+
+    @Suppress("BuilderSetStyle")
+    public final override fun toString(): String {
+      val attributes = mutableMapOf<String, String>()
+      if (duration != null) {
+        attributes["duration"] = duration!!.toString()
+      }
+      if (disambiguatingDescription != null) {
+        attributes["disambiguatingDescription"] =
+          disambiguatingDescription!!.toString(includeWrapperName = false)
+      }
+      if (identifier != null) {
+        attributes["identifier"] = identifier!!
+      }
+      if (name != null) {
+        attributes["name"] = name!!.toString(includeWrapperName = false)
+      }
+      attributes += additionalProperties.map { (k, v) -> k to v.toString() }
+      val commaSeparated =
+        attributes.entries.joinToString(separator = ", ") { (k, v) -> """$k=$v""" }
+      return """$selfTypeName($commaSeparated)"""
+    }
+  }
+}
+
+internal class TimerImpl : GenericTimer<TimerImpl, TimerImpl.Builder> {
+  protected override val selfTypeName: String
+    get() = "Timer"
+
+  protected override val additionalProperties: Map<String, Any?>
+    get() = emptyMap()
+
+  public constructor(
+    duration: Duration?,
+    disambiguatingDescription: DisambiguatingDescription?,
+    identifier: String?,
+    name: Name?,
+  ) : super(duration, disambiguatingDescription, identifier, name)
+
+  public constructor(timer: Timer) : super(timer)
+
+  protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
+
+  internal class Builder : GenericTimer.Builder<Builder, TimerImpl>() {
+    protected override val selfTypeName: String
+      get() = "Timer.Builder"
+
+    protected override val additionalProperties: Map<String, Any?>
+      get() = emptyMap()
+
+    protected override fun buildFromTimer(timer: Timer): TimerImpl =
+      timer as? TimerImpl ?: TimerImpl(timer)
+  }
+}
diff --git a/appactions/builtintypes/builtintypes-core/src/test/java/androidx/appactions/builtintypes/types/DataTypeTest.kt b/appactions/builtintypes/builtintypes-core/src/test/java/androidx/appactions/builtintypes/types/DataTypeTest.kt
index b7ccc81..14f8782 100644
--- a/appactions/builtintypes/builtintypes-core/src/test/java/androidx/appactions/builtintypes/types/DataTypeTest.kt
+++ b/appactions/builtintypes/builtintypes-core/src/test/java/androidx/appactions/builtintypes/types/DataTypeTest.kt
@@ -18,6 +18,7 @@
 
 import androidx.appactions.builtintypes.properties.Name
 import com.google.common.truth.Truth.assertThat
+import java.time.LocalDateTime
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
@@ -29,43 +30,69 @@
     val thing =
       Thing.Builder()
         // convenience setter
-        .setDisambiguatingDescription(Thing.DisambiguatingDescriptionValue.SONG)
+        .setDisambiguatingDescription("Awesome Thing")
         .setName(Name("Bohemian Rhapsody")) // authoritative setter
         .build()
-    assertThat(thing.disambiguatingDescription?.asText).isNull()
-    assertThat(thing.disambiguatingDescription?.asCanonicalValue)
-      .isEqualTo(Thing.DisambiguatingDescriptionValue.SONG)
+    assertThat(thing.disambiguatingDescription?.asCanonicalValue).isNull()
+    assertThat(thing.disambiguatingDescription?.asText).isEqualTo("Awesome Thing")
     assertThat(thing.name?.asText).isEqualTo("Bohemian Rhapsody")
   }
 
   @Test
   fun testEquals() {
-    val thing1 =
-      Thing.Builder()
-        .setName("John Wick 4")
-        .setDisambiguatingDescription(Thing.DisambiguatingDescriptionValue.MOVIE)
-        .build()
-    val thing2 =
-      Thing.Builder()
-        .setName("John Wick 4")
-        .setDisambiguatingDescription(Thing.DisambiguatingDescriptionValue.MOVIE)
-        .build()
+    val thing1 = Thing.Builder().setName("John Wick 4").build()
+    val thing2 = Thing.Builder().setName("John Wick 4").build()
     assertThat(thing1).isEqualTo(thing2)
   }
 
   @Test
   fun testCopying() {
-    val thing =
-      Thing.Builder()
-        .setName("John Wick 4")
-        .setDisambiguatingDescription(Thing.DisambiguatingDescriptionValue.MOVIE)
-        .build()
+    val thing = Thing.Builder().setName("John Wick 4").setDisambiguatingDescription("Movie").build()
     val copy = thing.toBuilder().setName("John Wick 2").build()
     assertThat(copy)
       .isEqualTo(
-        Thing.Builder()
-          .setName("John Wick 2")
-          .setDisambiguatingDescription(Thing.DisambiguatingDescriptionValue.MOVIE)
+        Thing.Builder().setName("John Wick 2").setDisambiguatingDescription("Movie").build()
+      )
+  }
+
+  @Test
+  fun testPolymorphicCopying() {
+    val thing1: Thing =
+      Alarm.Builder()
+        .setName("Wake up!")
+        .setAlarmSchedule(
+          Schedule.Builder()
+            .setStartDate(
+              LocalDateTime.of(
+                /* year= */ 2023,
+                /* month= */ 5,
+                /* dayOfMonth= */ 3,
+                /* hour= */ 8,
+                /* minute=*/ 30
+              )
+            )
+            .build()
+        )
+        .build()
+    val thing2 = thing1.toBuilder().setName("Go to bed!").build()
+    assertThat(thing2).isInstanceOf(Alarm::class.java)
+    assertThat(thing2)
+      .isEqualTo(
+        Alarm.Builder()
+          .setName("Go to bed!")
+          .setAlarmSchedule(
+            Schedule.Builder()
+              .setStartDate(
+                LocalDateTime.of(
+                  /* year= */ 2023,
+                  /* month= */ 5,
+                  /* dayOfMonth= */ 3,
+                  /* hour= */ 8,
+                  /* minute=*/ 30
+                )
+              )
+              .build()
+          )
           .build()
       )
   }
diff --git a/appactions/builtintypes/builtintypes-core/src/test/java/androidx/appactions/builtintypes/types/ExtensionTest.kt b/appactions/builtintypes/builtintypes-core/src/test/java/androidx/appactions/builtintypes/types/ExtensionTest.kt
index a4c4cc4..87ed941 100644
--- a/appactions/builtintypes/builtintypes-core/src/test/java/androidx/appactions/builtintypes/types/ExtensionTest.kt
+++ b/appactions/builtintypes/builtintypes-core/src/test/java/androidx/appactions/builtintypes/types/ExtensionTest.kt
@@ -47,7 +47,9 @@
       }
 
       fun setFoo(foo: String?) = apply { this.foo = foo }
+
       fun addBar(bar: Int) = apply { bars += bar }
+
       fun addBars(values: Iterable<Int>) = apply { bars += values }
     }
   }
diff --git a/appcompat/appcompat/build.gradle b/appcompat/appcompat/build.gradle
index 7eab234..0f110a8 100644
--- a/appcompat/appcompat/build.gradle
+++ b/appcompat/appcompat/build.gradle
@@ -9,7 +9,7 @@
 
 dependencies {
     api("androidx.annotation:annotation:1.3.0")
-    api(project(":core:core"))
+    api(projectOrArtifact(":core:core"))
 
     // Required to make activity 1.5.0-rc01 dependencies resolve.
     implementation("androidx.core:core-ktx:1.8.0")
diff --git a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPlugin.kt b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPlugin.kt
index b2792c6..a57d752 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPlugin.kt
+++ b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPlugin.kt
@@ -228,14 +228,21 @@
         // for apps.
         val mergeIntoMain = variantConfiguration.mergeIntoMain ?: isLibraryModule()
 
-        // TODO: When `mergeIntoMain` is true it lazily triggers the generation of all
-        //  the variants for all the build types. Due to b/265438201, that fails when
-        //  there are multiple build types. As temporary workaround, when `mergeIntoMain`
-        //  is true, calling a generation task for a specific build type will merge
-        //  profiles for all the variants of that build type and output it in the `main`
-        //  folder.
+        // This part changes according to the AGP version of the module. `mergeIntoMain` merges
+        // the profile of the generated profile for this variant into the main one. This can be
+        // applied to the `main` configuration or to single variants. On Agp 8.0, since it's not
+        // possible to run tests on multiple build types in the same run, when `mergeIntoMain` is
+        // true only variants of the specific build type invoked are merged. This means that on
+        // AGP 8.0 the `main` baseline profile is generated by only the build type `release` when
+        // calling `generateReleaseBaselineProfiles`. On Agp 8.1 instead, it works as intended and
+        // we can merge all the variants with `mergeIntoMain` true, independently from the build
+        // type.
         val (mergeAwareVariantName, mergeAwareVariantOutput) = if (mergeIntoMain) {
-            listOf(variant.buildType ?: "", "main")
+            if (supportsFeature(AgpFeature.TEST_MODULE_SUPPORTS_MULTIPLE_BUILD_TYPES)) {
+                listOf("", "main")
+            } else {
+                listOf(variant.buildType ?: "", "main")
+            }
         } else {
             listOf(variant.name, variant.name)
         }
diff --git a/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt b/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt
index 2ab457a..985e914 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt
+++ b/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt
@@ -38,12 +38,12 @@
 import org.junit.runners.JUnit4
 import org.junit.runners.Parameterized
 
+private const val EXPECTED_PROFILE_FOLDER = "generated/baselineProfiles"
+
 @RunWith(Parameterized::class)
 class BaselineProfileConsumerPluginTest(agpVersion: String?) {
 
     companion object {
-        private const val EXPECTED_PROFILE_FOLDER = "generated/baselineProfiles"
-
         @Parameterized.Parameters(name = "agpVersion={0}")
         @JvmStatic
         fun parameters() = TEST_AGP_VERSION_ALL
@@ -214,42 +214,6 @@
     }
 
     @Test
-    fun testGenerateTaskWithFlavorsAndMergeAll() {
-        projectSetup.consumer.setup(
-            androidPlugin = ANDROID_APPLICATION_PLUGIN,
-            flavors = true,
-            dependencyOnProducerProject = true,
-            baselineProfileBlock = """
-                mergeIntoMain = true
-            """.trimIndent()
-        )
-        projectSetup.producer.setupWithFreeAndPaidFlavors(
-            freeReleaseProfileLines = listOf(Fixtures.CLASS_1_METHOD_1, Fixtures.CLASS_1),
-            paidReleaseProfileLines = listOf(Fixtures.CLASS_2_METHOD_1, Fixtures.CLASS_2)
-        )
-
-        // Asserts that all per-variant, per-flavor and per-build type tasks are being generated.
-        gradleRunner.buildAndAssertThatOutput("tasks") {
-            contains("generateBaselineProfile - ")
-            contains("generateReleaseBaselineProfile - ")
-            doesNotContain("generateFreeReleaseBaselineProfile - ")
-            doesNotContain("generatePaidReleaseBaselineProfile - ")
-        }
-
-        gradleRunner
-            .withArguments("generateBaselineProfile", "--stacktrace")
-            .build()
-
-        assertThat(readBaselineProfileFileContent("main"))
-            .containsExactly(
-                Fixtures.CLASS_1,
-                Fixtures.CLASS_1_METHOD_1,
-                Fixtures.CLASS_2,
-                Fixtures.CLASS_2_METHOD_1,
-            )
-    }
-
-    @Test
     fun testPluginAppliedToLibraryModule() {
         projectSetup.producer.setup()
         projectSetup.consumer.setup(
@@ -621,7 +585,7 @@
         )
 
         gradleRunner
-            .withArguments("generateReleaseBaselineProfile", "--stacktrace")
+            .withArguments("generateBaselineProfile", "--stacktrace")
             .buildAndFail()
             .output
             .replace(System.lineSeparator(), " ")
@@ -642,7 +606,7 @@
         projectSetup.producer.setupWithoutFlavors(
             releaseProfileLines = listOf()
         )
-        gradleRunner.buildAndAssertThatOutput("generateReleaseBaselineProfile") {
+        gradleRunner.buildAndAssertThatOutput("generateBaselineProfile") {
             contains("No baseline profile rules were generated")
         }
     }
@@ -1139,6 +1103,45 @@
             }
         }
     }
+
+    @Test
+    fun testGenerateTaskWithFlavorsAndMergeAll() {
+        projectSetup.consumer.setup(
+            androidPlugin = ANDROID_APPLICATION_PLUGIN,
+            flavors = true,
+            dependencyOnProducerProject = true,
+            baselineProfileBlock = """
+                mergeIntoMain = true
+            """.trimIndent()
+        )
+        projectSetup.producer.setupWithFreeAndPaidFlavors(
+            freeReleaseProfileLines = listOf(Fixtures.CLASS_1_METHOD_1, Fixtures.CLASS_1),
+            paidReleaseProfileLines = listOf(Fixtures.CLASS_2_METHOD_1, Fixtures.CLASS_2)
+        )
+
+        // Asserts that all per-variant, per-flavor and per-build type tasks are being generated.
+        projectSetup.consumer.gradleRunner.buildAndAssertThatOutput("tasks") {
+            contains("generateBaselineProfile - ")
+            contains("generateReleaseBaselineProfile - ")
+            doesNotContain("generateFreeReleaseBaselineProfile - ")
+            doesNotContain("generatePaidReleaseBaselineProfile - ")
+        }
+
+        projectSetup.consumer.gradleRunner
+            .withArguments("generateBaselineProfile", "--stacktrace")
+            .build()
+
+        val lines = File(
+            projectSetup.consumer.rootDir,
+            "src/main/$EXPECTED_PROFILE_FOLDER/baseline-prof.txt"
+        ).readLines()
+        assertThat(lines).containsExactly(
+            Fixtures.CLASS_1,
+            Fixtures.CLASS_1_METHOD_1,
+            Fixtures.CLASS_2,
+            Fixtures.CLASS_2_METHOD_1,
+        )
+    }
 }
 
 @RunWith(JUnit4::class)
@@ -1315,4 +1318,43 @@
             }
         }
     }
+
+    @Test
+    fun testGenerateTaskWithFlavorsAndMergeAll() {
+        projectSetup.consumer.setup(
+            androidPlugin = ANDROID_APPLICATION_PLUGIN,
+            flavors = true,
+            dependencyOnProducerProject = true,
+            baselineProfileBlock = """
+                mergeIntoMain = true
+            """.trimIndent()
+        )
+        projectSetup.producer.setupWithFreeAndPaidFlavors(
+            freeReleaseProfileLines = listOf(Fixtures.CLASS_1_METHOD_1, Fixtures.CLASS_1),
+            paidReleaseProfileLines = listOf(Fixtures.CLASS_2_METHOD_1, Fixtures.CLASS_2)
+        )
+
+        // Asserts that all per-variant, per-flavor and per-build type tasks are being generated.
+        projectSetup.consumer.gradleRunner.buildAndAssertThatOutput("tasks") {
+            contains("generateBaselineProfile - ")
+            doesNotContain("generateReleaseBaselineProfile - ")
+            doesNotContain("generateFreeReleaseBaselineProfile - ")
+            doesNotContain("generatePaidReleaseBaselineProfile - ")
+        }
+
+        projectSetup.consumer.gradleRunner
+            .withArguments("generateBaselineProfile", "--stacktrace")
+            .build()
+
+        val lines = File(
+            projectSetup.consumer.rootDir,
+            "src/main/$EXPECTED_PROFILE_FOLDER/baseline-prof.txt"
+        ).readLines()
+        assertThat(lines).containsExactly(
+            Fixtures.CLASS_1,
+            Fixtures.CLASS_1_METHOD_1,
+            Fixtures.CLASS_2,
+            Fixtures.CLASS_2_METHOD_1,
+        )
+    }
 }
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoConfig.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoConfig.kt
index 77e58ab..d5cd112 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoConfig.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoConfig.kt
@@ -292,10 +292,14 @@
                 name = "android.heapprofd",
                 heapprofd_config = HeapprofdConfig(
                     shmem_size_bytes = 8388608,
-                    sampling_interval_bytes = 4096,
+                    sampling_interval_bytes = 2048,
                     block_client = true,
                     process_cmdline = config.packageNames,
+                    heaps = listOf(
+                        "com.android.art" // Java Heaps
+                    ),
                     continuous_dump_config = HeapprofdConfig.ContinuousDumpConfig(
+                        dump_phase_ms = 0,
                         dump_interval_ms = 500 // ms
                     )
                 )
diff --git a/bluetooth/integration-tests/testapp/build.gradle b/bluetooth/integration-tests/testapp/build.gradle
index c99f4b1..9e3f5fa 100644
--- a/bluetooth/integration-tests/testapp/build.gradle
+++ b/bluetooth/integration-tests/testapp/build.gradle
@@ -49,7 +49,7 @@
     implementation("androidx.activity:activity-ktx:1.7.1")
     implementation("androidx.appcompat:appcompat:1.6.1")
     implementation(libs.constraintLayout)
-    implementation("androidx.core:core-ktx:1.10.0")
+    implementation("androidx.core:core-ktx:1.10.1")
     implementation("androidx.fragment:fragment-ktx:1.5.7")
     implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.1")
     implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt
index 9cf5027..6f8ca9f 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt
@@ -17,6 +17,7 @@
 package androidx.bluetooth.integration.testapp.ui.scanner
 
 import android.annotation.SuppressLint
+import android.bluetooth.BluetoothDevice
 import android.bluetooth.le.ScanResult
 import android.view.LayoutInflater
 import android.view.View
@@ -29,7 +30,7 @@
 import androidx.recyclerview.widget.ListAdapter
 import androidx.recyclerview.widget.RecyclerView
 
-class ScannerAdapter(private val onClick: (ScanResult) -> Unit) :
+class ScannerAdapter(private val onClick: (BluetoothDevice) -> Unit) :
     ListAdapter<ScanResult, ScannerAdapter.ViewHolder>(ScannerDiffCallback) {
 
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
@@ -40,10 +41,10 @@
 
     override fun onBindViewHolder(holder: ViewHolder, position: Int) {
         val scanResult = getItem(position)
-        holder.bind(scanResult)
+        holder.bind(scanResult.device)
     }
 
-    inner class ViewHolder(itemView: View, private val onClick: (ScanResult) -> Unit) :
+    inner class ViewHolder(itemView: View, private val onClick: (BluetoothDevice) -> Unit) :
         RecyclerView.ViewHolder(itemView) {
 
         private val textViewDeviceName: TextView = itemView.findViewById(R.id.text_view_device_name)
@@ -51,20 +52,20 @@
             itemView.findViewById(R.id.text_view_device_address)
         private val buttonConnect: Button = itemView.findViewById(R.id.button_connect)
 
-        private var currentScanResult: ScanResult? = null
+        private var currentBluetoothDevice: BluetoothDevice? = null
 
         init {
             buttonConnect.setOnClickListener {
-                currentScanResult?.let(onClick)
+                currentBluetoothDevice?.let(onClick)
             }
         }
 
         @SuppressLint("MissingPermission")
-        fun bind(scanResult: ScanResult) {
-            currentScanResult = scanResult
-            textViewDeviceAddress.text = scanResult.device.address
-            textViewDeviceName.text = scanResult.device.name
-            textViewDeviceName.isVisible = scanResult.device.name.isNullOrEmpty().not()
+        fun bind(bluetoothDevice: BluetoothDevice) {
+            currentBluetoothDevice = bluetoothDevice
+            textViewDeviceAddress.text = bluetoothDevice.address
+            textViewDeviceName.text = bluetoothDevice.name
+            textViewDeviceName.isVisible = bluetoothDevice.name.isNullOrEmpty().not()
         }
     }
 }
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
index ad5e5da..485c94c 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
@@ -18,13 +18,14 @@
 
 // TODO(ofy) Migrate to androidx.bluetooth.BluetoothLe once scan API is in place
 import android.annotation.SuppressLint
-import android.bluetooth.le.ScanResult
+import android.bluetooth.BluetoothDevice
 import android.bluetooth.le.ScanSettings
 import android.os.Bundle
 import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.widget.Button
 import android.widget.TextView
 import androidx.bluetooth.integration.testapp.R
 import androidx.bluetooth.integration.testapp.databinding.FragmentScannerBinding
@@ -120,7 +121,7 @@
 
         binding.tabLayout.addOnTabSelectedListener(onTabSelectedListener)
 
-        scannerAdapter = ScannerAdapter { scanResult -> onClickScanResult(scanResult) }
+        scannerAdapter = ScannerAdapter { bluetoothDevice -> onClickScanResult(bluetoothDevice) }
         binding.recyclerViewScanResults.adapter = scannerAdapter
         binding.recyclerViewScanResults.addItemDecoration(
             DividerItemDecoration(context, LinearLayoutManager.VERTICAL)
@@ -156,10 +157,10 @@
     }
 
     private fun initData() {
-        scannerAdapter?.submitList(scannerViewModel.results)
-        scannerAdapter?.notifyItemRangeChanged(0, scannerViewModel.results.size)
+        scannerAdapter?.submitList(scannerViewModel.scanResults)
+        scannerAdapter?.notifyItemRangeChanged(0, scannerViewModel.scanResults.size)
 
-        scannerViewModel.devices.map { it.scanResult }.forEach(::addNewTab)
+        scannerViewModel.deviceConnections.map { it.bluetoothDevice }.forEach(::addNewTab)
     }
 
     private fun startScan() {
@@ -175,20 +176,20 @@
                     Log.d(TAG, "ScanResult collected: $it")
 
                     if (scannerViewModel.addScanResultIfNew(it)) {
-                        scannerAdapter?.submitList(scannerViewModel.results)
-                        scannerAdapter?.notifyItemInserted(scannerViewModel.results.size)
+                        scannerAdapter?.submitList(scannerViewModel.scanResults)
+                        scannerAdapter?.notifyItemInserted(scannerViewModel.scanResults.size)
                     }
                 }
         }
     }
 
-    private fun onClickScanResult(scanResult: ScanResult) {
+    private fun onClickScanResult(bluetoothDevice: BluetoothDevice) {
         isScanning = false
 
-        val index = scannerViewModel.addDeviceConnectionIfNew(scanResult)
+        val index = scannerViewModel.addDeviceConnectionIfNew(bluetoothDevice)
 
         val deviceTab = if (index == ScannerViewModel.NEW_DEVICE) {
-            addNewTab(scanResult)
+            addNewTab(bluetoothDevice)
         } else {
             binding.tabLayout.getTabAt(index)
         }
@@ -204,9 +205,9 @@
     }
 
     @SuppressLint("MissingPermission")
-    private fun addNewTab(scanResult: ScanResult): Tab {
-        val deviceAddress = scanResult.device.address
-        val deviceName = scanResult.device.name
+    private fun addNewTab(bluetoothDevice: BluetoothDevice): Tab {
+        val deviceAddress = bluetoothDevice.address
+        val deviceName = bluetoothDevice.name
 
         val newTab = binding.tabLayout.newTab()
         newTab.setCustomView(R.layout.tab_item_device)
@@ -216,6 +217,10 @@
         val textViewName = customView?.findViewById<TextView>(R.id.text_view_name)
         textViewName?.text = deviceName
         textViewName?.isVisible = deviceName.isNullOrEmpty().not()
+        customView?.findViewById<Button>(R.id.image_button_remove)?.setOnClickListener {
+            scannerViewModel.remove(bluetoothDevice)
+            binding.tabLayout.removeTab(newTab)
+        }
 
         binding.tabLayout.addTab(newTab)
         return newTab
@@ -231,7 +236,7 @@
             }
 
             try {
-                bluetoothLe.connectGatt(requireContext(), deviceConnection.scanResult.device) {
+                bluetoothLe.connectGatt(requireContext(), deviceConnection.bluetoothDevice) {
                     Log.d(TAG, "connectGatt result. getServices() = ${getServices()}")
 
                     deviceConnection.status = Status.CONNECTED
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerViewModel.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerViewModel.kt
index 518fe42..9e15997 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerViewModel.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerViewModel.kt
@@ -17,6 +17,7 @@
 package androidx.bluetooth.integration.testapp.ui.scanner
 
 // TODO(ofy) Migrate to androidx.bluetooth.ScanResult once in place
+import android.bluetooth.BluetoothDevice
 import android.bluetooth.BluetoothGattService
 import android.bluetooth.le.ScanResult
 import androidx.lifecycle.ViewModel
@@ -29,43 +30,51 @@
         internal const val NEW_DEVICE = -1
     }
 
-    internal val results: List<ScanResult> get() = _results.values.toList()
-    private val _results = mutableMapOf<String, ScanResult>()
+    internal val scanResults: List<ScanResult> get() = _scanResults.values.toList()
+    private val _scanResults = mutableMapOf<String, ScanResult>()
 
-    internal val devices: Set<DeviceConnection> get() = _devices
-    private val _devices = mutableSetOf<DeviceConnection>()
+    internal val deviceConnections: Set<DeviceConnection> get() = _deviceConnections
+    private val _deviceConnections = mutableSetOf<DeviceConnection>()
 
     fun addScanResultIfNew(scanResult: ScanResult): Boolean {
         val deviceAddress = scanResult.device.address
 
-        if (_results.containsKey(deviceAddress)) {
+        if (_scanResults.containsKey(deviceAddress)) {
             return false
         }
 
-        _results[deviceAddress] = scanResult
+        _scanResults[deviceAddress] = scanResult
         return true
     }
 
-    fun addDeviceConnectionIfNew(scanResult: ScanResult): Int {
-        val deviceConnection = DeviceConnection(scanResult)
+    fun addDeviceConnectionIfNew(bluetoothDevice: BluetoothDevice): Int {
+        val deviceConnection = DeviceConnection(bluetoothDevice)
 
-        val indexOf = _devices.map { it.scanResult }.indexOf(scanResult)
+        val indexOf = _deviceConnections.map { it.bluetoothDevice }.indexOf(bluetoothDevice)
         if (indexOf != -1) {
             // Index 0 is Results page; Tabs for devices start from 1.
             return indexOf + 1
         }
 
-        _devices.add(deviceConnection)
+        _deviceConnections.add(deviceConnection)
         return NEW_DEVICE
     }
 
+    fun remove(bluetoothDevice: BluetoothDevice) {
+        val deviceConnection = _deviceConnections.find { it.bluetoothDevice == bluetoothDevice }
+
+        _deviceConnections.remove(deviceConnection)
+    }
+
     fun deviceConnection(position: Int): DeviceConnection {
         // Index 0 is Results page; Tabs for devices start from 1.
-        return devices.elementAt(position - 1)
+        return deviceConnections.elementAt(position - 1)
     }
 }
 
-class DeviceConnection(val scanResult: ScanResult) {
+class DeviceConnection(
+    val bluetoothDevice: BluetoothDevice
+) {
     var status = Status.NOT_CONNECTED
     var services = emptyList<BluetoothGattService>()
 }
diff --git a/bluetooth/integration-tests/testapp/src/main/res/layout/tab_item_device.xml b/bluetooth/integration-tests/testapp/src/main/res/layout/tab_item_device.xml
index 23880a4..7c24d4d 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/layout/tab_item_device.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/layout/tab_item_device.xml
@@ -1,4 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?><!--
+<?xml version="1.0" encoding="utf-8"?>
+<!--
   Copyright 2023 The Android Open Source Project
 
   Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,23 +15,38 @@
   limitations under the License.
   -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:gravity="center"
-    android:orientation="vertical">
+    android:gravity="center">
 
-    <TextView
-        android:id="@+id/text_view_address"
+    <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:textColor="@color/black"
-        tools:text="70:04:13:03:98:B9" />
+        android:gravity="center"
+        android:orientation="vertical">
 
-    <TextView
-        android:id="@+id/text_view_name"
-        android:layout_width="wrap_content"
+        <TextView
+            android:id="@+id/text_view_address"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textColor="@color/black"
+            tools:text="70:04:13:03:98:B9" />
+
+        <TextView
+            android:id="@+id/text_view_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            tools:text="R33-0473" />
+
+    </LinearLayout>
+
+    <com.google.android.material.button.MaterialButton
+        android:id="@+id/image_button_remove"
+        style="@style/Widget.MaterialComponents.Button.TextButton"
+        android:layout_width="48dp"
         android:layout_height="wrap_content"
-        tools:text="R33-0473" />
+        app:icon="@drawable/baseline_clear_24" />
 
 </LinearLayout>
diff --git a/browser/browser/api/aidlRelease/current/android/support/customtabs/ICustomTabsCallback.aidl b/browser/browser/api/aidlRelease/current/android/support/customtabs/ICustomTabsCallback.aidl
index a2be168..c18d806 100644
--- a/browser/browser/api/aidlRelease/current/android/support/customtabs/ICustomTabsCallback.aidl
+++ b/browser/browser/api/aidlRelease/current/android/support/customtabs/ICustomTabsCallback.aidl
@@ -32,7 +32,7 @@
 // later when a module using the interface is updated, e.g., Mainline modules.
 
 package android.support.customtabs;
-/* @hide */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 interface ICustomTabsCallback {
   oneway void onNavigationEvent(int navigationEvent, in android.os.Bundle extras) = 1;
   oneway void extraCallback(String callbackName, in android.os.Bundle args) = 2;
diff --git a/browser/browser/api/aidlRelease/current/android/support/customtabs/ICustomTabsService.aidl b/browser/browser/api/aidlRelease/current/android/support/customtabs/ICustomTabsService.aidl
index bdffe9c..e289f12 100644
--- a/browser/browser/api/aidlRelease/current/android/support/customtabs/ICustomTabsService.aidl
+++ b/browser/browser/api/aidlRelease/current/android/support/customtabs/ICustomTabsService.aidl
@@ -32,7 +32,7 @@
 // later when a module using the interface is updated, e.g., Mainline modules.
 
 package android.support.customtabs;
-/* @hide */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 interface ICustomTabsService {
   boolean warmup(long flags) = 1;
   boolean newSession(in android.support.customtabs.ICustomTabsCallback callback) = 2;
diff --git a/browser/browser/api/aidlRelease/current/android/support/customtabs/IEngagementSignalsCallback.aidl b/browser/browser/api/aidlRelease/current/android/support/customtabs/IEngagementSignalsCallback.aidl
index c58eced..f3e5fd8 100644
--- a/browser/browser/api/aidlRelease/current/android/support/customtabs/IEngagementSignalsCallback.aidl
+++ b/browser/browser/api/aidlRelease/current/android/support/customtabs/IEngagementSignalsCallback.aidl
@@ -32,7 +32,7 @@
 // later when a module using the interface is updated, e.g., Mainline modules.
 
 package android.support.customtabs;
-/* @hide */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 interface IEngagementSignalsCallback {
   oneway void onVerticalScrollEvent(boolean isDirectionUp, in android.os.Bundle extras) = 1;
   oneway void onGreatestScrollPercentageIncreased(int scrollPercentage, in android.os.Bundle extras) = 2;
diff --git a/browser/browser/api/aidlRelease/current/android/support/customtabs/IPostMessageService.aidl b/browser/browser/api/aidlRelease/current/android/support/customtabs/IPostMessageService.aidl
index 353498f..107ad164 100644
--- a/browser/browser/api/aidlRelease/current/android/support/customtabs/IPostMessageService.aidl
+++ b/browser/browser/api/aidlRelease/current/android/support/customtabs/IPostMessageService.aidl
@@ -32,7 +32,7 @@
 // later when a module using the interface is updated, e.g., Mainline modules.
 
 package android.support.customtabs;
-/* @hide */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 interface IPostMessageService {
   void onMessageChannelReady(in android.support.customtabs.ICustomTabsCallback callback, in android.os.Bundle extras) = 1;
   void onPostMessage(in android.support.customtabs.ICustomTabsCallback callback, String message, in android.os.Bundle extras) = 2;
diff --git a/browser/browser/api/aidlRelease/current/android/support/customtabs/trusted/ITrustedWebActivityCallback.aidl b/browser/browser/api/aidlRelease/current/android/support/customtabs/trusted/ITrustedWebActivityCallback.aidl
index 5b10111..f5f8679 100644
--- a/browser/browser/api/aidlRelease/current/android/support/customtabs/trusted/ITrustedWebActivityCallback.aidl
+++ b/browser/browser/api/aidlRelease/current/android/support/customtabs/trusted/ITrustedWebActivityCallback.aidl
@@ -32,7 +32,7 @@
 // later when a module using the interface is updated, e.g., Mainline modules.
 
 package android.support.customtabs.trusted;
-/* @hide */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 interface ITrustedWebActivityCallback {
   void onExtraCallback(String callbackName, in android.os.Bundle bundle) = 1;
 }
diff --git a/browser/browser/api/aidlRelease/current/android/support/customtabs/trusted/ITrustedWebActivityService.aidl b/browser/browser/api/aidlRelease/current/android/support/customtabs/trusted/ITrustedWebActivityService.aidl
index 96e530d..f7beed4 100644
--- a/browser/browser/api/aidlRelease/current/android/support/customtabs/trusted/ITrustedWebActivityService.aidl
+++ b/browser/browser/api/aidlRelease/current/android/support/customtabs/trusted/ITrustedWebActivityService.aidl
@@ -32,7 +32,7 @@
 // later when a module using the interface is updated, e.g., Mainline modules.
 
 package android.support.customtabs.trusted;
-/* @hide */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 interface ITrustedWebActivityService {
   android.os.Bundle areNotificationsEnabled(in android.os.Bundle args) = 5;
   android.os.Bundle notifyNotificationWithChannel(in android.os.Bundle args) = 1;
diff --git a/browser/browser/src/main/stableAidl/android/support/customtabs/ICustomTabsCallback.aidl b/browser/browser/src/main/stableAidl/android/support/customtabs/ICustomTabsCallback.aidl
index 1e17fa7..c868161 100644
--- a/browser/browser/src/main/stableAidl/android/support/customtabs/ICustomTabsCallback.aidl
+++ b/browser/browser/src/main/stableAidl/android/support/customtabs/ICustomTabsCallback.aidl
@@ -21,8 +21,8 @@
 
 /**
  * Interface to a CustomTabsCallback.
- * @hide
  */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 interface ICustomTabsCallback {
     oneway void onNavigationEvent(int navigationEvent, in Bundle extras) = 1;
     oneway void extraCallback(String callbackName, in Bundle args) = 2;
diff --git a/browser/browser/src/main/stableAidl/android/support/customtabs/ICustomTabsService.aidl b/browser/browser/src/main/stableAidl/android/support/customtabs/ICustomTabsService.aidl
index 3fdc601..cccdf3c8 100644
--- a/browser/browser/src/main/stableAidl/android/support/customtabs/ICustomTabsService.aidl
+++ b/browser/browser/src/main/stableAidl/android/support/customtabs/ICustomTabsService.aidl
@@ -26,8 +26,8 @@
 
 /**
  * Interface to a CustomTabsService.
- * @hide
  */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 interface ICustomTabsService {
     boolean warmup(long flags) = 1;
     boolean newSession(in ICustomTabsCallback callback) = 2;
diff --git a/browser/browser/src/main/stableAidl/android/support/customtabs/IEngagementSignalsCallback.aidl b/browser/browser/src/main/stableAidl/android/support/customtabs/IEngagementSignalsCallback.aidl
index 50ec270..091f8ab 100644
--- a/browser/browser/src/main/stableAidl/android/support/customtabs/IEngagementSignalsCallback.aidl
+++ b/browser/browser/src/main/stableAidl/android/support/customtabs/IEngagementSignalsCallback.aidl
@@ -20,8 +20,8 @@
 
 /**
  * Interface to an EngagementSignalsCallback.
- * @hide
  */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 interface IEngagementSignalsCallback {
     oneway void onVerticalScrollEvent(boolean isDirectionUp, in Bundle extras) = 1;
     oneway void onGreatestScrollPercentageIncreased(int scrollPercentage, in Bundle extras) = 2;
diff --git a/browser/browser/src/main/stableAidl/android/support/customtabs/IPostMessageService.aidl b/browser/browser/src/main/stableAidl/android/support/customtabs/IPostMessageService.aidl
index 2c8a605c..3193141 100644
--- a/browser/browser/src/main/stableAidl/android/support/customtabs/IPostMessageService.aidl
+++ b/browser/browser/src/main/stableAidl/android/support/customtabs/IPostMessageService.aidl
@@ -22,8 +22,8 @@
 
 /**
  * Interface to a PostMessageService.
- * @hide
  */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 interface IPostMessageService {
     void onMessageChannelReady(in ICustomTabsCallback callback, in Bundle extras) = 1;
     void onPostMessage(in ICustomTabsCallback callback, String message, in Bundle extras) = 2;
diff --git a/browser/browser/src/main/stableAidl/android/support/customtabs/trusted/ITrustedWebActivityCallback.aidl b/browser/browser/src/main/stableAidl/android/support/customtabs/trusted/ITrustedWebActivityCallback.aidl
index d445480..41533dc 100644
--- a/browser/browser/src/main/stableAidl/android/support/customtabs/trusted/ITrustedWebActivityCallback.aidl
+++ b/browser/browser/src/main/stableAidl/android/support/customtabs/trusted/ITrustedWebActivityCallback.aidl
@@ -20,8 +20,8 @@
 
 /**
  * Interface to a TrustedWebActivityCallback.
- * @hide
  */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 interface ITrustedWebActivityCallback {
     void onExtraCallback(String callbackName, in Bundle bundle) = 1;
 }
diff --git a/browser/browser/src/main/stableAidl/android/support/customtabs/trusted/ITrustedWebActivityService.aidl b/browser/browser/src/main/stableAidl/android/support/customtabs/trusted/ITrustedWebActivityService.aidl
index 36634b2..3b7d147f 100644
--- a/browser/browser/src/main/stableAidl/android/support/customtabs/trusted/ITrustedWebActivityService.aidl
+++ b/browser/browser/src/main/stableAidl/android/support/customtabs/trusted/ITrustedWebActivityService.aidl
@@ -20,8 +20,8 @@
 
 /**
  * Interface to a TrustedWebActivityService.
- * @hide
  */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 interface ITrustedWebActivityService {
     Bundle areNotificationsEnabled(in Bundle args) = 5;
     Bundle notifyNotificationWithChannel(in Bundle args) = 1;
diff --git a/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/ChangeInfoGitClientTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/ChangeInfoGitClientTest.kt
index 0e37d85..aedf44140 100644
--- a/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/ChangeInfoGitClientTest.kt
+++ b/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/ChangeInfoGitClientTest.kt
@@ -226,15 +226,25 @@
     }
 
     fun getChangedFiles(config: String): List<String> {
-        return ChangeInfoGitClient(config, "").findChangedFilesSince("", "", false)
+        val client = ChangeInfoGitClient(
+            config,
+            """
+            <manifest>
+                <project path="frameworks/support" name="platform/frameworks/support"/>
+            </manifest>
+            """,
+            "frameworks/support")
+        return client.findChangedFilesSince("", "", false)
     }
 
     @Test
     fun getGitLog_hasVersion() {
         checkVersion("""
-            <project path="prebuilts/internal" revision="prebuiltsVersion1"/>
-            <project path="frameworks/support" revision="supportVersion1"/>
-            <project path="tools/external/gradle" revision="gradleVersion1"/>
+            <manifest>
+                <project path="prebuilts/internal" name="platform/prebuilts/internal" revision="prebuiltsVersion1"/>
+                <project path="frameworks/support" name="platform/frameworks/support" revision="supportVersion1"/>
+                <project path="tools/external/gradle" name="platform/tools/external/gradle" revision="gradleVersion1"/>
+            </manifest>
             """,
             "supportVersion1"
         )
@@ -245,6 +255,7 @@
         var threw = false
         try {
             checkVersion("""
+                <manifest/>
                 """,
                 null
             )
@@ -258,8 +269,8 @@
         assertEquals(expectedVersion, getVersion(config))
     }
     fun getVersion(config: String): String? {
-        return ChangeInfoGitClient("{}", config)
-            .getGitLog(GitCommitRange(n = 1), keepMerges = true, fullProjectDir = File("."))
+        return ChangeInfoGitClient("{}", config, "frameworks/support")
+            .getGitLog(GitCommitRange(n = 1), keepMerges = true, projectDir = File("."))
             .getOrNull(0)?.sha
     }
 }
diff --git a/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/GitRunnerGitClientTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/GitRunnerGitClientTest.kt
index e38551c..eb24eee 100644
--- a/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/GitRunnerGitClientTest.kt
+++ b/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/GitRunnerGitClientTest.kt
@@ -115,7 +115,7 @@
                     n = 1
                 ),
                 keepMerges = true,
-                fullProjectDir = workingDir
+                projectDir = workingDir
         )
         assertEquals(1, commitList.size)
     }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt b/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
index 6d9ff9c..f6ad277 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
@@ -23,15 +23,8 @@
 import com.google.gson.stream.JsonWriter
 import groovy.util.Node
 import java.io.File
-import java.io.StringReader
 import java.io.StringWriter
-import java.util.StringTokenizer
-import org.apache.xerces.jaxp.SAXParserImpl.JAXPSAXParser
-import org.dom4j.Document
-import org.dom4j.DocumentException
-import org.dom4j.DocumentFactory
 import org.dom4j.Element
-import org.dom4j.io.SAXReader
 import org.dom4j.io.XMLWriter
 import org.gradle.api.GradleException
 import org.gradle.api.Project
@@ -56,8 +49,6 @@
 import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
 import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper
 import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
-import org.xml.sax.InputSource
-import org.xml.sax.XMLReader
 
 fun Project.configureMavenArtifactUpload(
     extension: AndroidXExtension,
@@ -213,11 +204,7 @@
 fun sortPomDependencies(pom: String): String {
     // Workaround for using the default namespace in dom4j.
     val namespaceUris = mapOf("ns" to "http://maven.apache.org/POM/4.0.0")
-    val docFactory = DocumentFactory()
-    docFactory.xPathNamespaceURIs = namespaceUris
-    // Ensure that we're consistently using JAXP parser.
-    val xmlReader = JAXPSAXParser()
-    val document = parseText(docFactory, xmlReader, pom)
+    val document = parseXml(pom, namespaceUris)
 
     // For each <dependencies> element, sort the contained elements in-place.
     document.rootElement
@@ -253,47 +240,6 @@
     return stringWriter.toString()
 }
 
-// Coped from org.dom4j.DocumentHelper with modifications to allow SAXReader configuration.
-@Throws(DocumentException::class)
-fun parseText(
-    documentFactory: DocumentFactory,
-    xmlReader: XMLReader,
-    text: String,
-): Document {
-    val reader = SAXReader.createDefault()
-    reader.documentFactory = documentFactory
-    reader.xmlReader = xmlReader
-    val encoding = getEncoding(text)
-    val source = InputSource(StringReader(text))
-    source.encoding = encoding
-    val result = reader.read(source)
-    if (result.xmlEncoding == null) {
-        result.xmlEncoding = encoding
-    }
-    return result
-}
-
-// Coped from org.dom4j.DocumentHelper.
-private fun getEncoding(text: String): String? {
-    var result: String? = null
-    val xml = text.trim { it <= ' ' }
-    if (xml.startsWith("<?xml")) {
-        val end = xml.indexOf("?>")
-        val sub = xml.substring(0, end)
-        val tokens = StringTokenizer(sub, " =\"'")
-        while (tokens.hasMoreTokens()) {
-            val token = tokens.nextToken()
-            if ("encoding" == token) {
-                if (tokens.hasMoreTokens()) {
-                    result = tokens.nextToken()
-                }
-                break
-            }
-        }
-    }
-    return result
-}
-
 /**
  * Looks for a dependencies JSON element within [metadata] and sorts its contents.
  */
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/XmlParser.kt b/buildSrc/private/src/main/kotlin/androidx/build/XmlParser.kt
new file mode 100644
index 0000000..e584040
--- /dev/null
+++ b/buildSrc/private/src/main/kotlin/androidx/build/XmlParser.kt
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * 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 androidx.build
+
+import java.io.StringReader
+import java.util.StringTokenizer
+import org.apache.xerces.jaxp.SAXParserImpl.JAXPSAXParser
+import org.dom4j.Document
+import org.dom4j.DocumentException
+import org.dom4j.DocumentFactory
+import org.dom4j.io.SAXReader
+import org.xml.sax.InputSource
+import org.xml.sax.XMLReader
+
+/**
+ * Parses an xml string
+ */
+@Throws(DocumentException::class)
+internal fun parseXml(text: String, namespaceUris: Map<String, String>): Document {
+    val docFactory = DocumentFactory()
+    docFactory.xPathNamespaceURIs = namespaceUris
+    // Ensure that we're consistently using JAXP parser.
+    val xmlReader = JAXPSAXParser()
+    return parseXml(docFactory, xmlReader, text)
+}
+
+// Copied from org.dom4j.DocumentHelper with modifications to allow SAXReader configuration.
+@Throws(DocumentException::class)
+private fun parseXml(
+    documentFactory: DocumentFactory,
+    xmlReader: XMLReader,
+    text: String,
+): Document {
+    val reader = SAXReader.createDefault()
+    reader.documentFactory = documentFactory
+    reader.xmlReader = xmlReader
+    val encoding = getEncoding(text)
+    val source = InputSource(StringReader(text))
+    source.encoding = encoding
+    val result = reader.read(source)
+    if (result.xmlEncoding == null) {
+        result.xmlEncoding = encoding
+    }
+    return result
+}
+
+// Copied from org.dom4j.DocumentHelper.
+private fun getEncoding(text: String): String? {
+    var result: String? = null
+    val xml = text.trim { it <= ' ' }
+    if (xml.startsWith("<?xml")) {
+        val end = xml.indexOf("?>")
+        val sub = xml.substring(0, end)
+        val tokens = StringTokenizer(sub, " =\"'")
+        while (tokens.hasMoreTokens()) {
+            val token = tokens.nextToken()
+            if ("encoding" == token) {
+                if (tokens.hasMoreTokens()) {
+                    result = tokens.nextToken()
+                }
+                break
+            }
+        }
+    }
+    return result
+}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
index 54597b4..d1ba10f 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
@@ -259,7 +259,7 @@
          */
         fun Project.getFrameworksSupportCommitShaAtHead(): String {
             val gitClient = GitClient.forProject(project)
-            return gitClient.getHeadSha(getSupportRootFolder())
+            return gitClient.getHeadSha()
         }
     }
 }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
index 756da81..9d0804f 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
@@ -17,6 +17,7 @@
 package androidx.build.dependencyTracker
 
 import androidx.build.dependencyTracker.AffectedModuleDetector.Companion.ENABLE_ARG
+import androidx.build.getCheckoutRoot
 import androidx.build.getDistributionDirectory
 import androidx.build.gitclient.GitClient
 import androidx.build.gradle.isRoot
@@ -158,6 +159,7 @@
                     { spec ->
                         val params = spec.parameters
                         params.rootDir = rootProject.projectDir
+                        params.checkoutRoot = rootProject.getCheckoutRoot()
                         params.projectGraph = projectGraph
                         params.dependencyTracker = dependencyTracker
                         params.log = logger
@@ -257,6 +259,7 @@
         var acceptAll: Boolean
 
         var rootDir: File
+        var checkoutRoot: File
         var projectGraph: ProjectGraph
         var dependencyTracker: DependencyTracker
         var log: FileLogger?
@@ -279,6 +282,7 @@
             }
             val gitClient = GitClient.create(
                 projectDir = parameters.rootDir,
+                checkoutRoot = parameters.checkoutRoot,
                 logger = logger.toLogger(),
                 changeInfoPath = parameters.changeInfoPath.get(),
                 manifestPath = parameters.manifestPath.get()
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaCombinedDocsTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaCombinedDocsTask.kt
index bfec803..4427c94 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaCombinedDocsTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaCombinedDocsTask.kt
@@ -20,7 +20,6 @@
 import androidx.build.dokka.kmpDocs.DokkaInputModels.Module
 import androidx.build.dokka.kmpDocs.DokkaInputModels.PluginsConfiguration
 import androidx.build.dokka.kmpDocs.DokkaUtils.COMBINE_PLUGIN_LIBRARIES
-import androidx.build.getSupportRootFolder
 import androidx.build.gitclient.GitClient
 import javax.inject.Inject
 import org.gradle.api.DefaultTask
@@ -207,7 +206,7 @@
                 val gitClient = GitClient.forProject(project)
                 it.replacementUrl.set(
                     DokkaUtils.createCsAndroidUrl(
-                        gitClient.getHeadSha(project.getSupportRootFolder())
+                        gitClient.getHeadSha()
                     )
                 )
             }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/gitclient/ChangeInfoGitClient.kt b/buildSrc/private/src/main/kotlin/androidx/build/gitclient/ChangeInfoGitClient.kt
index d27fbb9..2a92245 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/gitclient/ChangeInfoGitClient.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/gitclient/ChangeInfoGitClient.kt
@@ -16,6 +16,7 @@
 
 package androidx.build.gitclient
 
+import androidx.build.parseXml
 import com.google.gson.Gson
 import java.io.File
 import org.gradle.api.GradleException
@@ -29,8 +30,6 @@
  *
  * For more information, see b/171569941
  */
-private const val mainProject: String = "platform/frameworks/support"
-
 class ChangeInfoGitClient(
     /**
      * The file containing the information about which changes are new in this build
@@ -39,9 +38,45 @@
     /**
      * The file containing version information
      */
-    private val versionInfo: String
+    private val versionInfo: String,
+    /**
+     * The project directory relative to the root of the checkout
+     * The repository is derived from this value
+     */
+    private val projectPath: String
 ) : GitClient {
 
+    /**
+     * The name of the current git repository. In many cases this is 'platform/frameworks/support'
+     */
+    private val projectName: String by lazy {
+        computeProjectName(versionInfo)
+    }
+
+    private fun computeProjectName(config: String): String {
+        val document = parseXml(config, mapOf())
+        val projectIterator = document.rootElement.elementIterator()
+        while (projectIterator.hasNext()) {
+          val project = projectIterator.next()
+            val repositoryPath = project.attributeValue("path")
+            if (repositoryPath != null) {
+                if (pathContains(repositoryPath, projectPath)) {
+                    val name = project.attributeValue("name")
+                    check(name != null) {
+                        "Could not get name for project $project"
+                    }
+                    return name
+                }
+            }
+        }
+        throw GradleException(
+            "Could not find project with path '$projectPath' in config '$versionInfo'"
+        )
+    }
+
+    /**
+     * Object representing changes
+     */
     private val changeInfo: ChangeInfo by lazy {
         val gson = Gson()
         gson.fromJson(changeInfoText, ChangeInfo::class.java)
@@ -65,20 +100,22 @@
 
     private val changesInThisRepo: List<ChangeEntry>
         get() {
-            return changeInfo.changes?.filter { it.project == mainProject } ?: emptyList()
+            return changeInfo.changes?.filter { it.project == projectName } ?: emptyList()
         }
 
-    private fun parseSupportVersion(config: String): String {
+    private fun extractVersion(config: String): String {
         val revisionRegex = Regex("revision=\"([^\"]*)\"")
         for (line in config.split("\n")) {
-            if (line.contains("path=\"frameworks/support\"")) {
+            if (line.contains("name=\"${projectName}\"")) {
                 val result = revisionRegex.find(line)?.groupValues?.get(1)
                 if (result != null) {
                     return result
                 }
             }
         }
-        throw GradleException("Could not identify frameworks/support version from text '$config'")
+        throw GradleException(
+            "Could not identify version of project '$projectName' from config text '$config'"
+        )
     }
 
     /**
@@ -138,7 +175,7 @@
     override fun getGitLog(
         gitCommitRange: GitCommitRange,
         keepMerges: Boolean,
-        fullProjectDir: File
+        projectDir: File?
     ): List<Commit> {
         if (gitCommitRange.n != 1) {
             throw UnsupportedOperationException(
@@ -153,9 +190,13 @@
         }
         return listOf(
             Commit(
-                "_CommitSHA:${parseSupportVersion(versionInfo)}",
-                fullProjectDir.toString()
+                "_CommitSHA:${extractVersion(versionInfo)}",
+                projectPath
             )
         )
     }
 }
+
+private fun pathContains(ancestor: String, child: String): Boolean {
+    return (child + "/").startsWith(ancestor + "/")
+}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitClient.kt b/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitClient.kt
index 25c6a81..1bb758f 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitClient.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitClient.kt
@@ -16,6 +16,7 @@
 
 package androidx.build.gitclient
 
+import androidx.build.getCheckoutRoot
 import androidx.build.releasenotes.getBuganizerLink
 import androidx.build.releasenotes.getChangeIdAOSPLink
 import java.io.File
@@ -36,17 +37,14 @@
     fun getGitLog(
         gitCommitRange: GitCommitRange,
         keepMerges: Boolean,
-        fullProjectDir: File
+        projectDir: File?
     ): List<Commit>
 
     /**
-     * Returns the full commit sha for the HEAD of the given git root directory.
-     *
-     * @param projectDir Root directory of the git project
+     * Returns the full commit sha for the HEAD of the git repository
      */
-    fun getHeadSha(
-        projectDir: File
-    ): String {
+    fun getHeadSha(): String {
+        val projectDir = null
         val commitList: List<Commit> =
             getGitLog(
                 GitCommitRange(
@@ -55,7 +53,7 @@
                     n = 1
                 ),
                 keepMerges = true,
-                fullProjectDir = projectDir
+                projectDir = projectDir
             )
         if (commitList.isEmpty()) {
             throw RuntimeException("Failed to find git commit for HEAD!")
@@ -87,6 +85,7 @@
         fun forProject(project: Project): GitClient {
             return create(
                 project.projectDir,
+                project.getCheckoutRoot(),
                 project.logger,
                 GitClient.getChangeInfoPath(project).get(),
                 GitClient.getManifestPath(project).get()
@@ -94,6 +93,7 @@
         }
         fun create(
             projectDir: File,
+            checkoutRoot: File,
             logger: Logger,
             changeInfoPath: String,
             manifestPath: String
@@ -112,9 +112,14 @@
                 }
                 val changeInfoText = changeInfoFile.readText()
                 val manifestText = manifestFile.readText()
+                val projectDirRelativeToRoot = projectDir.relativeTo(checkoutRoot).toString()
                 logger.info("Using ChangeInfoGitClient with change info path $changeInfoPath, " +
-                    "manifest $manifestPath")
-                return ChangeInfoGitClient(changeInfoText, manifestText)
+                    "manifest $manifestPath project dir $projectDirRelativeToRoot")
+                return ChangeInfoGitClient(
+                    changeInfoText,
+                    manifestText,
+                    projectDirRelativeToRoot
+                )
             }
             val gitRoot = findGitDirInParentFilepath(projectDir)
             check(gitRoot != null) {
@@ -127,6 +132,7 @@
 }
 
 data class MultiGitClient(
+    val checkoutRoot: File,
     val logger: Logger,
     val changeInfoPath: String,
     val manifestPath: String
@@ -134,19 +140,27 @@
     // Map from the root of the git repository to a GitClient for that repository
     // In AndroidX this directory could be frameworks/support, external/noto-fonts, or others
     @Transient // We don't want Gradle to persist GitClient in the configuration cache
-    val cache: MutableMap<File, GitClient> = ConcurrentHashMap()
+    var cache: MutableMap<File, GitClient>? = null
 
     fun getGitClient(projectDir: File): GitClient {
+        // If this object was restored from the Configuration cache, this value will be null
+        // So, if it is null we have to reinitialize it
+        var cache = this.cache
+        if (cache == null) {
+            cache = ConcurrentHashMap()
+            this.cache = cache
+        }
         return cache.getOrPut(
             key = projectDir
         ) {
-            GitClient.create(projectDir, logger, changeInfoPath, manifestPath)
+            GitClient.create(projectDir, checkoutRoot, logger, changeInfoPath, manifestPath)
         }
     }
 
     companion object {
         fun create(project: Project): MultiGitClient {
             return MultiGitClient(
+                project.getCheckoutRoot(),
                 project.logger,
                 GitClient.getChangeInfoPath(project).get(),
                 GitClient.getManifestPath(project).get()
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitRunnerGitClient.kt b/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitRunnerGitClient.kt
index 342d2e5..21e4e1c 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitRunnerGitClient.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitRunnerGitClient.kt
@@ -98,12 +98,12 @@
      *
      * @param gitCommitRange the [GitCommitRange] that defines the parameters of the git log command
      * @param keepMerges boolean for whether or not to add merges to the return [List<Commit>].
-     * @param fullProjectDir a [File] object that represents the full project directory.
+     * @param projectDir a [File] object that represents the project directory.
      */
     override fun getGitLog(
         gitCommitRange: GitCommitRange,
         keepMerges: Boolean,
-        fullProjectDir: File
+        projectDir: File?
     ): List<Commit> {
         val commitStartDelimiter: String = "_CommitStart"
         val commitSHADelimiter: String = "_CommitSHA:"
@@ -111,6 +111,10 @@
         val authorEmailDelimiter: String = "_Author:"
         val dateDelimiter: String = "_Date:"
         val bodyDelimiter: String = "_Body:"
+        val fullProjectDir = if (projectDir == null)
+                workingDir
+            else
+                projectDir
         val localProjectDir: String = fullProjectDir.relativeTo(gitRoot).toString()
         val relativeProjectDir: String = fullProjectDir.relativeTo(workingDir).toString()
 
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraControls.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraControls.kt
index bfc9850..556d1a6 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraControls.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraControls.kt
@@ -27,58 +27,75 @@
 // Public controls and enums used to interact with a CameraGraph.
 
 /** An enum to match the CameraMetadata.CONTROL_AF_MODE_* constants. */
-enum class AfMode(val value: Int) {
-    OFF(CameraMetadata.CONTROL_AF_MODE_OFF),
-    AUTO(CameraMetadata.CONTROL_AF_MODE_AUTO),
-    MACRO(CameraMetadata.CONTROL_AF_MODE_MACRO),
-    CONTINUOUS_VIDEO(CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_VIDEO),
-    CONTINUOUS_PICTURE(CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE),
-    EDOF(CameraMetadata.CONTROL_AF_MODE_EDOF);
-
+@JvmInline
+value class AfMode(val value: Int) {
     companion object {
+        val OFF = AfMode(CameraMetadata.CONTROL_AF_MODE_OFF)
+        val AUTO = AfMode(CameraMetadata.CONTROL_AF_MODE_AUTO)
+        val MACRO = AfMode(CameraMetadata.CONTROL_AF_MODE_MACRO)
+        val CONTINUOUS_VIDEO = AfMode(CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_VIDEO)
+        val CONTINUOUS_PICTURE = AfMode(CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE)
+        val EDOF = AfMode(CameraMetadata.CONTROL_AF_MODE_EDOF)
+
+        val values = listOf(OFF, AUTO, MACRO, CONTINUOUS_VIDEO, CONTINUOUS_PICTURE, EDOF)
+
         @JvmStatic
-        fun fromIntOrNull(value: Int): AfMode? = values().firstOrNull { it.value == value }
+        fun fromIntOrNull(value: Int): AfMode? = values.firstOrNull { it.value == value }
     }
 }
 
 /** An enum to match the CameraMetadata.CONTROL_AE_MODE_* constants. */
-enum class AeMode(val value: Int) {
-    OFF(CameraMetadata.CONTROL_AE_MODE_OFF),
-    ON(CameraMetadata.CONTROL_AE_MODE_ON),
-    ON_AUTO_FLASH(CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH),
-    ON_ALWAYS_FLASH(CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH),
-    ON_AUTO_FLASH_REDEYE(CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE);
-
+@JvmInline
+value class AeMode(val value: Int) {
     companion object {
+        val OFF = AeMode(CameraMetadata.CONTROL_AE_MODE_OFF)
+        val ON = AeMode(CameraMetadata.CONTROL_AE_MODE_ON)
+        val ON_ALWAYS_FLASH = AeMode(CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH)
+        val ON_AUTO_FLASH = AeMode(CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH)
+        val ON_AUTO_FLASH_REDEYE = AeMode(CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE)
+        val ON_EXTERNAL_FLASH = AeMode(CameraMetadata.CONTROL_AE_MODE_ON_EXTERNAL_FLASH)
+
+        val values =
+            listOf(OFF, ON, ON_AUTO_FLASH, ON_ALWAYS_FLASH, ON_AUTO_FLASH_REDEYE, ON_EXTERNAL_FLASH)
+
         @JvmStatic
-        fun fromIntOrNull(value: Int): AeMode? = values().firstOrNull { it.value == value }
+        fun fromIntOrNull(value: Int): AeMode? = values.firstOrNull { it.value == value }
     }
 }
 
 /** An enum to match the CameraMetadata.CONTROL_AWB_MODE_* constants. */
-enum class AwbMode(val value: Int) {
-    AUTO(CameraMetadata.CONTROL_AWB_MODE_AUTO),
-    CLOUDY_DAYLIGHT(CameraMetadata.CONTROL_AWB_MODE_CLOUDY_DAYLIGHT),
-    DAYLIGHT(CameraMetadata.CONTROL_AWB_MODE_DAYLIGHT),
-    INCANDESCENT(CameraMetadata.CONTROL_AWB_MODE_INCANDESCENT),
-    FLUORESCENT(CameraMetadata.CONTROL_AWB_MODE_FLUORESCENT);
-
+@JvmInline
+value class AwbMode(val value: Int) {
     companion object {
+        val OFF = AwbMode(CameraMetadata.CONTROL_AWB_MODE_OFF)
+        val AUTO = AwbMode(CameraMetadata.CONTROL_AWB_MODE_AUTO)
+        val CLOUDY_DAYLIGHT = AwbMode(CameraMetadata.CONTROL_AWB_MODE_CLOUDY_DAYLIGHT)
+        val DAYLIGHT = AwbMode(CameraMetadata.CONTROL_AWB_MODE_DAYLIGHT)
+        val INCANDESCENT = AwbMode(CameraMetadata.CONTROL_AWB_MODE_INCANDESCENT)
+        val FLUORESCENT = AwbMode(CameraMetadata.CONTROL_AWB_MODE_FLUORESCENT)
+        val SHADE = AwbMode(CameraMetadata.CONTROL_AWB_MODE_SHADE)
+        val TWILIGHT = AwbMode(CameraMetadata.CONTROL_AWB_MODE_TWILIGHT)
+
+        val values =
+            listOf(OFF, AUTO, CLOUDY_DAYLIGHT, DAYLIGHT, INCANDESCENT, FLUORESCENT, SHADE, TWILIGHT)
+
         @JvmStatic
-        fun fromIntOrNull(value: Int): AwbMode? = values().firstOrNull { it.value == value }
+        fun fromIntOrNull(value: Int): AwbMode? = values.firstOrNull { it.value == value }
     }
 }
 
 /** An enum to match the CameraMetadata.FLASH_MODE_* constants. */
-enum class FlashMode(val value: Int) {
-    OFF(CameraMetadata.FLASH_MODE_OFF),
-    SINGLE(CameraMetadata.FLASH_MODE_SINGLE),
-    TORCH(CameraMetadata.FLASH_MODE_TORCH);
-
+@JvmInline
+value class FlashMode(val value: Int) {
     companion object {
+        val OFF = FlashMode(CameraMetadata.FLASH_MODE_OFF)
+        val SINGLE = FlashMode(CameraMetadata.FLASH_MODE_SINGLE)
+        val TORCH = FlashMode(CameraMetadata.FLASH_MODE_TORCH)
+
+        private val values = listOf(OFF, SINGLE, TORCH)
+
         @JvmStatic
-        fun fromIntOrNull(value: Int): FlashMode? =
-            values().firstOrNull { it.value == value }
+        fun fromIntOrNull(value: Int): FlashMode? = values.firstOrNull { it.value == value }
     }
 }
 
@@ -92,34 +109,39 @@
  *
  * #CONTROL_AE_MODE_ON
  */
-enum class TorchState {
-    ON,
-    OFF
+class TorchState private constructor() {
+    companion object {
+        val ON = TorchState()
+        val OFF = TorchState()
+    }
 }
 
 /** Requirement to consider prior to locking auto-exposure, auto-focus and auto-whitebalance. */
-enum class Lock3ABehavior {
-    /**
-     * This requirement means that we want to lock the values for 3A immediately.
-     *
-     * For AE/AWB this is achieved by asking the camera device to lock them immediately by setting
-     * [android.hardware.camera2.CaptureRequest.CONTROL_AE_LOCK],
-     * [android.hardware.camera2.CaptureRequest.CONTROL_AWB_LOCK] to true right away.
-     *
-     * For AF we immediately ask the camera device to trigger AF by setting the
-     * [android.hardware.camera2.CaptureRequest.CONTROL_AF_TRIGGER] to
-     * [android.hardware.camera2.CaptureRequest.CONTROL_AF_TRIGGER_START].
-     */
-    IMMEDIATE,
+@JvmInline
+value class Lock3ABehavior private constructor(val value: Int) {
+    companion object {
+        /**
+         * This requirement means that we want to lock the values for 3A immediately.
+         *
+         * For AE/AWB this is achieved by asking the camera device to lock them immediately by setting
+         * [android.hardware.camera2.CaptureRequest.CONTROL_AE_LOCK],
+         * [android.hardware.camera2.CaptureRequest.CONTROL_AWB_LOCK] to true right away.
+         *
+         * For AF we immediately ask the camera device to trigger AF by setting the
+         * [android.hardware.camera2.CaptureRequest.CONTROL_AF_TRIGGER] to
+         * [android.hardware.camera2.CaptureRequest.CONTROL_AF_TRIGGER_START].
+         */
+        val IMMEDIATE = Lock3ABehavior(1)
 
-    /**
-     * Lock 3A values after their current scan is finished. If there is no active ongoing scan then
-     * the values will be locked to the current values.
-     */
-    AFTER_CURRENT_SCAN,
+        /**
+         * Lock 3A values after their current scan is finished. If there is no active ongoing scan then
+         * the values will be locked to the current values.
+         */
+        val AFTER_CURRENT_SCAN = Lock3ABehavior(2)
 
-    /** Initiate a new scan, and then lock the values once the scan is done. */
-    AFTER_NEW_SCAN,
+        /** Initiate a new scan, and then lock the values once the scan is done. */
+        val AFTER_NEW_SCAN = Lock3ABehavior(3)
+    }
 }
 
 /**
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraGraph.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraGraph.kt
index e25f4f7..d9e9c27 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraGraph.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraGraph.kt
@@ -213,10 +213,22 @@
         }
     }
 
-    enum class OperatingMode {
-        NORMAL,
-        HIGH_SPEED,
-        EXTENSION,
+    /**
+     * Operating mode defines the major categories of how a CameraGraph instance will operate when
+     * not operating a [NORMAL] camera graph.
+     *
+     * @property NORMAL represents standard camera operation and behavior.
+     * @property HIGH_SPEED represents a camera operating at high frame rate, usually used to
+     *   produce slow motion videos.
+     * @property EXTENSION represents device-specific modes that may operate differently or have
+     *   significant limitations in order to produce specific kinds of camera results.
+     */
+    class OperatingMode private constructor() {
+        companion object {
+            val NORMAL = OperatingMode()
+            val HIGH_SPEED = OperatingMode()
+            val EXTENSION = OperatingMode()
+        }
     }
 
     @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/Streams.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/Streams.kt
index cb67e88..a8a64f4 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/Streams.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/Streams.kt
@@ -302,10 +302,12 @@
             )
     }
 
-    enum class OutputType {
-        SURFACE,
-        SURFACE_VIEW,
-        SURFACE_TEXTURE,
+    class OutputType private constructor() {
+        companion object {
+            val SURFACE = OutputType()
+            val SURFACE_VIEW = OutputType()
+            val SURFACE_TEXTURE = OutputType()
+        }
     }
 
     /**
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Configuration.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Configuration.kt
index 042b6ca..57cf2d0 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Configuration.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Configuration.kt
@@ -188,8 +188,7 @@
                     when (outputType) {
                         OutputType.SURFACE_TEXTURE -> SurfaceTexture::class.java
                         OutputType.SURFACE_VIEW -> SurfaceHolder::class.java
-                        OutputType.SURFACE ->
-                            throw IllegalStateException("Unsupported OutputType: $outputType")
+                        else -> throw IllegalStateException("Unsupported OutputType: $outputType")
                     }
                 configuration = Api26Compat.newOutputConfiguration(size, outputKlass)
             }
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/core/Debug.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/core/Debug.kt
index 70c0f57..3a516b2 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/core/Debug.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/core/Debug.kt
@@ -107,6 +107,7 @@
                 CameraGraph.OperatingMode.HIGH_SPEED -> "High Speed"
                 CameraGraph.OperatingMode.NORMAL -> "Normal"
                 CameraGraph.OperatingMode.EXTENSION -> "Extension"
+                else -> "Unknown"
             }
 
         val capabilities = metadata[REQUEST_AVAILABLE_CAPABILITIES]
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/ModeEnum3ATest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/ModeEnum3ATest.kt
index 9af5a51..41820c2 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/ModeEnum3ATest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/ModeEnum3ATest.kt
@@ -29,16 +29,16 @@
 
     @Test
     fun iterateAfModes() {
-        assertThat(AfMode.values().all { afMode -> afMode.value >= 0 }).isTrue()
+        assertThat(AfMode.values.all { afMode -> afMode.value >= 0 }).isTrue()
     }
 
     @Test
     fun iterateAeModes() {
-        assertThat(AeMode.values().all { aeMode -> aeMode.value >= 0 }).isTrue()
+        assertThat(AeMode.values.all { aeMode -> aeMode.value >= 0 }).isTrue()
     }
 
     @Test
     fun iterateAwbModes() {
-        assertThat(AwbMode.values().all { awbMode -> awbMode.value >= 0 }).isTrue()
+        assertThat(AwbMode.values.all { awbMode -> awbMode.value >= 0 }).isTrue()
     }
 }
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/DynamicRangeResolver.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/DynamicRangeResolver.java
index cb3d0cf..2a564b6 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/DynamicRangeResolver.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/DynamicRangeResolver.java
@@ -221,7 +221,7 @@
             @NonNull String rangeOwnerLabel) {
 
         // Dynamic range is already resolved if it is fully specified.
-        if (isFullySpecified(requestedDynamicRange)) {
+        if (requestedDynamicRange.isFullySpecified()) {
             if (combinedConstraints.contains(requestedDynamicRange)) {
                 return requestedDynamicRange;
             }
@@ -315,7 +315,7 @@
         // The constraints are unordered, so it may not produce an "optimal" dynamic range. This
         // works for 8-bit, 10-bit or partially specified HDR dynamic ranges.
         for (DynamicRange candidateRange : combinedConstraints) {
-            Preconditions.checkState(isFullySpecified(candidateRange), "Candidate dynamic"
+            Preconditions.checkState(candidateRange.isFullySpecified(), "Candidate dynamic"
                     + " range must be fully specified.");
 
             // Only consider HDR constraints
@@ -390,7 +390,7 @@
             Preconditions.checkNotNull(candidateRange,
                     "Fully specified DynamicRange cannot be null.");
             int candidateEncoding = candidateRange.getEncoding();
-            Preconditions.checkState(isFullySpecified(candidateRange),
+            Preconditions.checkState(candidateRange.isFullySpecified(),
                     "Fully specified DynamicRange must have fully defined encoding.");
             if (candidateEncoding == ENCODING_SDR) {
                 // Only consider HDR encodings
@@ -431,15 +431,6 @@
     }
 
     /**
-     * Returns {@code true} if both the encoding and bit depth are not unspecified types.
-     */
-    private static boolean isFullySpecified(@NonNull DynamicRange dynamicRange) {
-        return dynamicRange.getEncoding() != ENCODING_UNSPECIFIED
-                && dynamicRange.getEncoding() != ENCODING_HDR_UNSPECIFIED
-                && dynamicRange.getBitDepth() != BIT_DEPTH_UNSPECIFIED;
-    }
-
-    /**
      * Returns {@code true} if the dynamic range has an unspecified HDR encoding, a concrete
      * encoding with unspecified bit depth, or a concrete bit depth.
      */
@@ -485,7 +476,7 @@
      */
     private static boolean canResolve(@NonNull DynamicRange testRange,
             @NonNull DynamicRange fullySpecifiedRange) {
-        Preconditions.checkState(isFullySpecified(fullySpecifiedRange), "Fully specified range is"
+        Preconditions.checkState(fullySpecifiedRange.isFullySpecified(), "Fully specified range is"
                 + " not actually fully specified.");
         if (testRange.getEncoding() == ENCODING_HDR_UNSPECIFIED
                 && fullySpecifiedRange.getEncoding() == ENCODING_SDR) {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/DynamicRange.java b/camera/camera-core/src/main/java/androidx/camera/core/DynamicRange.java
index df198ab..535d0f9 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/DynamicRange.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/DynamicRange.java
@@ -255,6 +255,16 @@
         return mBitDepth;
     }
 
+    /**
+     * Returns {@code true} if both the encoding and bit depth are not unspecified types.
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public boolean isFullySpecified() {
+        return getEncoding() != ENCODING_UNSPECIFIED
+                && getEncoding() != ENCODING_HDR_UNSPECIFIED
+                && getBitDepth() != BIT_DEPTH_UNSPECIFIED;
+    }
+
     @NonNull
     @Override
     public String toString() {
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/EncoderProfilesUtil.java b/camera/camera-testing/src/main/java/androidx/camera/testing/EncoderProfilesUtil.java
deleted file mode 100644
index 170b11b..0000000
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/EncoderProfilesUtil.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * 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 androidx.camera.testing;
-
-import android.media.EncoderProfiles;
-import android.media.MediaFormat;
-import android.media.MediaRecorder;
-import android.util.Size;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.RequiresApi;
-import androidx.camera.core.impl.EncoderProfilesProxy;
-import androidx.camera.core.impl.EncoderProfilesProxy.AudioProfileProxy;
-import androidx.camera.core.impl.EncoderProfilesProxy.ImmutableEncoderProfilesProxy;
-import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy;
-
-import java.util.Collections;
-
-/**
- * Utility methods for testing {@link EncoderProfiles} related classes, including predefined
- * resolutions, attributes and {@link EncoderProfilesProxy}, which can be used directly on the
- * unit tests.
- */
-@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-public final class EncoderProfilesUtil {
-
-    /** Resolution for QCIF. */
-    public static final Size RESOLUTION_QCIF = new Size(176, 144);
-    /** Resolution for QVGA. */
-    public static final Size RESOLUTION_QVGA = new Size(320, 240);
-    /** Resolution for CIF. */
-    public static final Size RESOLUTION_CIF = new Size(352, 288);
-    /** Resolution for VGA. */
-    public static final Size RESOLUTION_VGA = new Size(640, 480);
-    /** Resolution for 480P. */
-    public static final Size RESOLUTION_480P = new Size(720, 480); /* 640, 704 or 720 x 480 */
-    /** Resolution for 720P. */
-    public static final Size RESOLUTION_720P = new Size(1280, 720);
-    /** Resolution for 1080P. */
-    public static final Size RESOLUTION_1080P = new Size(1920, 1080); /* 1920 x 1080 or 1088 */
-    /** Resolution for 2K. */
-    public static final Size RESOLUTION_2K = new Size(2048, 1080);
-    /** Resolution for QHD. */
-    public static final Size RESOLUTION_QHD = new Size(2560, 1440);
-    /** Resolution for 2160P. */
-    public static final Size RESOLUTION_2160P = new Size(3840, 2160);
-    /** Resolution for 4KDCI. */
-    public static final Size RESOLUTION_4KDCI = new Size(4096, 2160);
-
-    /** Default duration. */
-    public static final int DEFAULT_DURATION = 30;
-    /** Default output format. */
-    public static final int DEFAULT_OUTPUT_FORMAT = MediaRecorder.OutputFormat.MPEG_4;
-    /** Default video codec. */
-    public static final int DEFAULT_VIDEO_CODEC = MediaRecorder.VideoEncoder.H264;
-    /** Default media type. */
-    public static final String DEFAULT_VIDEO_MEDIA_TYPE = MediaFormat.MIMETYPE_VIDEO_AVC;
-    /** Default video bitrate. */
-    public static final int DEFAULT_VIDEO_BITRATE = 8 * 1024 * 1024;
-    /** Default video frame rate. */
-    public static final int DEFAULT_VIDEO_FRAME_RATE = 30;
-    /** Default video code profile. */
-    public static final int DEFAULT_VIDEO_PROFILE = EncoderProfilesProxy.CODEC_PROFILE_NONE;
-    /** Default bit depth. */
-    public static final int DEFAULT_VIDEO_BIT_DEPTH = VideoProfileProxy.BIT_DEPTH_8;
-    /** Default chroma subsampling. */
-    public static final int DEFAULT_VIDEO_CHROMA_SUBSAMPLING = EncoderProfiles.VideoProfile.YUV_420;
-    /** Default hdr format. */
-    public static final int DEFAULT_VIDEO_HDR_FORMAT = EncoderProfiles.VideoProfile.HDR_NONE;
-    /** Default audio codec. */
-    public static final int DEFAULT_AUDIO_CODEC = MediaRecorder.AudioEncoder.AAC;
-    /** Default media type. */
-    public static final String DEFAULT_AUDIO_MEDIA_TYPE = MediaFormat.MIMETYPE_AUDIO_AAC;
-    /** Default audio bitrate. */
-    public static final int DEFAULT_AUDIO_BITRATE = 192_000;
-    /** Default audio sample rate. */
-    public static final int DEFAULT_AUDIO_SAMPLE_RATE = 48_000;
-    /** Default channel count. */
-    public static final int DEFAULT_AUDIO_CHANNELS = 1;
-    /** Default audio code profile. */
-    public static final int DEFAULT_AUDIO_PROFILE = EncoderProfilesProxy.CODEC_PROFILE_NONE;
-
-    public static final EncoderProfilesProxy PROFILES_QCIF = createFakeEncoderProfilesProxy(
-            RESOLUTION_QCIF.getWidth(),
-            RESOLUTION_QCIF.getHeight()
-    );
-
-    public static final EncoderProfilesProxy PROFILES_QVGA = createFakeEncoderProfilesProxy(
-            RESOLUTION_QVGA.getWidth(),
-            RESOLUTION_QVGA.getHeight()
-    );
-
-    public static final EncoderProfilesProxy PROFILES_CIF = createFakeEncoderProfilesProxy(
-            RESOLUTION_CIF.getWidth(),
-            RESOLUTION_CIF.getHeight()
-    );
-
-    public static final EncoderProfilesProxy PROFILES_VGA = createFakeEncoderProfilesProxy(
-            RESOLUTION_VGA.getWidth(),
-            RESOLUTION_VGA.getHeight()
-    );
-
-    public static final EncoderProfilesProxy PROFILES_480P = createFakeEncoderProfilesProxy(
-            RESOLUTION_480P.getWidth(),
-            RESOLUTION_480P.getHeight()
-    );
-
-    public static final EncoderProfilesProxy PROFILES_720P = createFakeEncoderProfilesProxy(
-            RESOLUTION_720P.getWidth(),
-            RESOLUTION_720P.getHeight()
-    );
-
-    public static final EncoderProfilesProxy PROFILES_1080P = createFakeEncoderProfilesProxy(
-            RESOLUTION_1080P.getWidth(),
-            RESOLUTION_1080P.getHeight()
-    );
-
-    public static final EncoderProfilesProxy PROFILES_2K = createFakeEncoderProfilesProxy(
-            RESOLUTION_2K.getWidth(),
-            RESOLUTION_2K.getHeight()
-    );
-
-    public static final EncoderProfilesProxy PROFILES_QHD = createFakeEncoderProfilesProxy(
-            RESOLUTION_QHD.getWidth(),
-            RESOLUTION_QHD.getHeight()
-    );
-
-    public static final EncoderProfilesProxy PROFILES_2160P = createFakeEncoderProfilesProxy(
-            RESOLUTION_2160P.getWidth(),
-            RESOLUTION_2160P.getHeight()
-    );
-
-    public static final EncoderProfilesProxy PROFILES_4KDCI = createFakeEncoderProfilesProxy(
-            RESOLUTION_4KDCI.getWidth(),
-            RESOLUTION_4KDCI.getHeight()
-    );
-
-    /** A utility method to create an EncoderProfilesProxy with some default values. */
-    @NonNull
-    public static EncoderProfilesProxy createFakeEncoderProfilesProxy(
-            int videoFrameWidth,
-            int videoFrameHeight
-    ) {
-        VideoProfileProxy videoProfile = createFakeVideoProfileProxy(videoFrameWidth,
-                videoFrameHeight);
-        AudioProfileProxy audioProfile = createFakeAudioProfileProxy();
-
-        return ImmutableEncoderProfilesProxy.create(
-                DEFAULT_DURATION,
-                DEFAULT_OUTPUT_FORMAT,
-                Collections.singletonList(audioProfile),
-                Collections.singletonList(videoProfile)
-        );
-    }
-
-    /** A utility method to create a VideoProfileProxy with some default values. */
-    @NonNull
-    public static VideoProfileProxy createFakeVideoProfileProxy(
-            int videoFrameWidth,
-            int videoFrameHeight
-    ) {
-        return VideoProfileProxy.create(
-                DEFAULT_VIDEO_CODEC,
-                DEFAULT_VIDEO_MEDIA_TYPE,
-                DEFAULT_VIDEO_BITRATE,
-                DEFAULT_VIDEO_FRAME_RATE,
-                videoFrameWidth,
-                videoFrameHeight,
-                DEFAULT_VIDEO_PROFILE,
-                DEFAULT_VIDEO_BIT_DEPTH,
-                DEFAULT_VIDEO_CHROMA_SUBSAMPLING,
-                DEFAULT_VIDEO_HDR_FORMAT
-        );
-    }
-
-    /** A utility method to create an AudioProfileProxy with some default values. */
-    @NonNull
-    public static AudioProfileProxy createFakeAudioProfileProxy() {
-        return AudioProfileProxy.create(
-                DEFAULT_AUDIO_CODEC,
-                DEFAULT_AUDIO_MEDIA_TYPE,
-                DEFAULT_AUDIO_BITRATE,
-                DEFAULT_AUDIO_SAMPLE_RATE,
-                DEFAULT_AUDIO_CHANNELS,
-                DEFAULT_AUDIO_PROFILE
-        );
-    }
-
-    // This class is not instantiable.
-    private EncoderProfilesUtil() {
-    }
-}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/EncoderProfilesUtil.kt b/camera/camera-testing/src/main/java/androidx/camera/testing/EncoderProfilesUtil.kt
new file mode 100644
index 0000000..c344c6c
--- /dev/null
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/EncoderProfilesUtil.kt
@@ -0,0 +1,213 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * 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 androidx.camera.testing
+
+import android.media.EncoderProfiles
+import android.media.MediaFormat
+import android.media.MediaRecorder
+import android.util.Size
+import androidx.annotation.RequiresApi
+import androidx.camera.core.impl.EncoderProfilesProxy
+import androidx.camera.core.impl.EncoderProfilesProxy.AudioProfileProxy
+import androidx.camera.core.impl.EncoderProfilesProxy.ImmutableEncoderProfilesProxy
+import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy
+
+/**
+ * Utility methods for testing [EncoderProfiles] related classes, including predefined
+ * resolutions, attributes and [EncoderProfilesProxy], which can be used directly on the
+ * unit tests.
+ */
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+
+object EncoderProfilesUtil {
+    /** Resolution for QCIF.  */
+    val RESOLUTION_QCIF = Size(176, 144)
+
+    /** Resolution for QVGA.  */
+    val RESOLUTION_QVGA = Size(320, 240)
+
+    /** Resolution for CIF.  */
+    val RESOLUTION_CIF = Size(352, 288)
+
+    /** Resolution for VGA.  */
+    val RESOLUTION_VGA = Size(640, 480)
+
+    /** Resolution for 480P.  */
+    val RESOLUTION_480P = Size(720, 480) /* 640, 704 or 720 x 480 */
+
+    /** Resolution for 720P.  */
+    val RESOLUTION_720P = Size(1280, 720)
+
+    /** Resolution for 1080P.  */
+    val RESOLUTION_1080P = Size(1920, 1080) /* 1920 x 1080 or 1088 */
+
+    /** Resolution for 2K.  */
+    val RESOLUTION_2K = Size(2048, 1080)
+
+    /** Resolution for QHD.  */
+    val RESOLUTION_QHD = Size(2560, 1440)
+
+    /** Resolution for 2160P.  */
+    val RESOLUTION_2160P = Size(3840, 2160)
+
+    /** Resolution for 4KDCI.  */
+    val RESOLUTION_4KDCI = Size(4096, 2160)
+
+    /** Default duration.  */
+    const val DEFAULT_DURATION = 30
+
+    /** Default output format.  */
+    const val DEFAULT_OUTPUT_FORMAT = MediaRecorder.OutputFormat.MPEG_4
+
+    /** Default video codec.  */
+    const val DEFAULT_VIDEO_CODEC = MediaRecorder.VideoEncoder.H264
+
+    /** Default media type.  */
+    const val DEFAULT_VIDEO_MEDIA_TYPE = MediaFormat.MIMETYPE_VIDEO_AVC
+
+    /** Default video bitrate.  */
+    const val DEFAULT_VIDEO_BITRATE = 8 * 1024 * 1024
+
+    /** Default video frame rate.  */
+    const val DEFAULT_VIDEO_FRAME_RATE = 30
+
+    /** Default video code profile.  */
+    const val DEFAULT_VIDEO_PROFILE = EncoderProfilesProxy.CODEC_PROFILE_NONE
+
+    /** Default bit depth.  */
+    const val DEFAULT_VIDEO_BIT_DEPTH = VideoProfileProxy.BIT_DEPTH_8
+
+    /** Default chroma subsampling.  */
+    const val DEFAULT_VIDEO_CHROMA_SUBSAMPLING = EncoderProfiles.VideoProfile.YUV_420
+
+    /** Default hdr format.  */
+    const val DEFAULT_VIDEO_HDR_FORMAT = EncoderProfiles.VideoProfile.HDR_NONE
+
+    /** Default audio codec.  */
+    const val DEFAULT_AUDIO_CODEC = MediaRecorder.AudioEncoder.AAC
+
+    /** Default media type.  */
+    const val DEFAULT_AUDIO_MEDIA_TYPE = MediaFormat.MIMETYPE_AUDIO_AAC
+
+    /** Default audio bitrate.  */
+    const val DEFAULT_AUDIO_BITRATE = 192000
+
+    /** Default audio sample rate.  */
+    const val DEFAULT_AUDIO_SAMPLE_RATE = 48000
+
+    /** Default channel count.  */
+    const val DEFAULT_AUDIO_CHANNELS = 1
+
+    /** Default audio code profile.  */
+    const val DEFAULT_AUDIO_PROFILE = EncoderProfilesProxy.CODEC_PROFILE_NONE
+    val PROFILES_QCIF = createFakeEncoderProfilesProxy(
+        RESOLUTION_QCIF.width,
+        RESOLUTION_QCIF.height
+    )
+    val PROFILES_QVGA = createFakeEncoderProfilesProxy(
+        RESOLUTION_QVGA.width,
+        RESOLUTION_QVGA.height
+    )
+    val PROFILES_CIF = createFakeEncoderProfilesProxy(
+        RESOLUTION_CIF.width,
+        RESOLUTION_CIF.height
+    )
+    val PROFILES_VGA = createFakeEncoderProfilesProxy(
+        RESOLUTION_VGA.width,
+        RESOLUTION_VGA.height
+    )
+    val PROFILES_480P = createFakeEncoderProfilesProxy(
+        RESOLUTION_480P.width,
+        RESOLUTION_480P.height
+    )
+    val PROFILES_720P = createFakeEncoderProfilesProxy(
+        RESOLUTION_720P.width,
+        RESOLUTION_720P.height
+    )
+    val PROFILES_1080P = createFakeEncoderProfilesProxy(
+        RESOLUTION_1080P.width,
+        RESOLUTION_1080P.height
+    )
+    val PROFILES_2K = createFakeEncoderProfilesProxy(
+        RESOLUTION_2K.width,
+        RESOLUTION_2K.height
+    )
+    val PROFILES_QHD = createFakeEncoderProfilesProxy(
+        RESOLUTION_QHD.width,
+        RESOLUTION_QHD.height
+    )
+    val PROFILES_2160P = createFakeEncoderProfilesProxy(
+        RESOLUTION_2160P.width,
+        RESOLUTION_2160P.height
+    )
+    val PROFILES_4KDCI = createFakeEncoderProfilesProxy(
+        RESOLUTION_4KDCI.width,
+        RESOLUTION_4KDCI.height
+    )
+
+    /** A utility method to create an EncoderProfilesProxy with some default values.  */
+    fun createFakeEncoderProfilesProxy(
+        videoFrameWidth: Int,
+        videoFrameHeight: Int
+    ): EncoderProfilesProxy {
+        val videoProfile = createFakeVideoProfileProxy(
+            videoFrameWidth,
+            videoFrameHeight
+        )
+        val audioProfile = createFakeAudioProfileProxy()
+        return ImmutableEncoderProfilesProxy.create(
+            DEFAULT_DURATION,
+            DEFAULT_OUTPUT_FORMAT,
+            listOf(audioProfile),
+            listOf(videoProfile)
+        )
+    }
+
+    /** A utility method to create a VideoProfileProxy with some default values.  */
+    fun createFakeVideoProfileProxy(
+        videoFrameWidth: Int,
+        videoFrameHeight: Int,
+        videoCodec: Int = DEFAULT_VIDEO_CODEC,
+        videoMediaType: String = DEFAULT_VIDEO_MEDIA_TYPE,
+        videoBitDepth: Int = DEFAULT_VIDEO_BIT_DEPTH,
+        videoHdrFormat: Int = DEFAULT_VIDEO_HDR_FORMAT
+    ): VideoProfileProxy {
+        return VideoProfileProxy.create(
+            videoCodec,
+            videoMediaType,
+            DEFAULT_VIDEO_BITRATE,
+            DEFAULT_VIDEO_FRAME_RATE,
+            videoFrameWidth,
+            videoFrameHeight,
+            DEFAULT_VIDEO_PROFILE,
+            videoBitDepth,
+            DEFAULT_VIDEO_CHROMA_SUBSAMPLING,
+            videoHdrFormat
+        )
+    }
+
+    /** A utility method to create an AudioProfileProxy with some default values.  */
+    fun createFakeAudioProfileProxy(): AudioProfileProxy {
+        return AudioProfileProxy.create(
+            DEFAULT_AUDIO_CODEC,
+            DEFAULT_AUDIO_MEDIA_TYPE,
+            DEFAULT_AUDIO_BITRATE,
+            DEFAULT_AUDIO_SAMPLE_RATE,
+            DEFAULT_AUDIO_CHANNELS,
+            DEFAULT_AUDIO_PROFILE
+        )
+    }
+}
\ No newline at end of file
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/Recorder.java b/camera/camera-video/src/main/java/androidx/camera/video/Recorder.java
index c1111f4..d14e237 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/Recorder.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/Recorder.java
@@ -82,7 +82,7 @@
 import androidx.camera.video.internal.compat.quirk.DeactivateEncoderSurfaceBeforeStopEncoderQuirk;
 import androidx.camera.video.internal.compat.quirk.DeviceQuirks;
 import androidx.camera.video.internal.compat.quirk.EncoderNotUsePersistentInputSurfaceQuirk;
-import androidx.camera.video.internal.config.MimeInfo;
+import androidx.camera.video.internal.config.AudioMimeInfo;
 import androidx.camera.video.internal.encoder.AudioEncoderConfig;
 import androidx.camera.video.internal.encoder.BufferCopiedEncodedData;
 import androidx.camera.video.internal.encoder.EncodeException;
@@ -1318,7 +1318,7 @@
             throws AudioSourceAccessException, InvalidConfigException {
         MediaSpec mediaSpec = getObservableData(mMediaSpec);
         // Resolve the audio mime info
-        MimeInfo audioMimeInfo = resolveAudioMimeInfo(mediaSpec, mResolvedEncoderProfiles);
+        AudioMimeInfo audioMimeInfo = resolveAudioMimeInfo(mediaSpec, mResolvedEncoderProfiles);
         Timebase audioSourceTimebase = Timebase.UPTIME;
 
         // Select and create the audio source
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java
index 0a0373e..a10d019 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java
@@ -122,7 +122,7 @@
 import androidx.camera.video.internal.compat.quirk.PreviewDelayWhenVideoCaptureIsBoundQuirk;
 import androidx.camera.video.internal.compat.quirk.PreviewStretchWhenVideoCaptureIsBoundQuirk;
 import androidx.camera.video.internal.compat.quirk.VideoQualityQuirk;
-import androidx.camera.video.internal.config.MimeInfo;
+import androidx.camera.video.internal.config.VideoMimeInfo;
 import androidx.camera.video.internal.encoder.InvalidConfigException;
 import androidx.camera.video.internal.encoder.VideoEncoderConfig;
 import androidx.camera.video.internal.encoder.VideoEncoderInfo;
@@ -1140,7 +1140,7 @@
         VideoValidatedEncoderProfilesProxy encoderProfiles =
                 videoCapabilities.findHighestSupportedEncoderProfilesFor(resolution, dynamicRange);
         VideoEncoderInfo videoEncoderInfo = resolveVideoEncoderInfo(videoEncoderInfoFinder,
-                encoderProfiles, mediaSpec, resolution, expectedFrameRate);
+                encoderProfiles, mediaSpec, resolution, dynamicRange, expectedFrameRate);
         if (videoEncoderInfo == null) {
             // If VideoCapture cannot find videoEncoderInfo, it means that VideoOutput should
             // also not be able to find the encoder. VideoCapture will not handle this situation
@@ -1168,9 +1168,11 @@
             @Nullable VideoValidatedEncoderProfilesProxy encoderProfiles,
             @NonNull MediaSpec mediaSpec,
             @NonNull Size resolution,
+            @NonNull DynamicRange dynamicRange,
             @NonNull Range<Integer> expectedFrameRate) {
         // Resolve the VideoEncoderConfig
-        MimeInfo videoMimeInfo = resolveVideoMimeInfo(mediaSpec, encoderProfiles);
+        VideoMimeInfo videoMimeInfo = resolveVideoMimeInfo(mediaSpec, dynamicRange,
+                encoderProfiles);
         VideoEncoderConfig videoEncoderConfig = resolveVideoEncoderConfig(
                 videoMimeInfo,
                 // Timebase won't affect the found EncoderInfo so give a arbitrary one.
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/VideoEncoderSession.java b/camera/camera-video/src/main/java/androidx/camera/video/VideoEncoderSession.java
index 2bc65fd..c908b8a 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/VideoEncoderSession.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/VideoEncoderSession.java
@@ -31,7 +31,7 @@
 import androidx.camera.core.impl.utils.futures.FutureCallback;
 import androidx.camera.core.impl.utils.futures.Futures;
 import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
-import androidx.camera.video.internal.config.MimeInfo;
+import androidx.camera.video.internal.config.VideoMimeInfo;
 import androidx.camera.video.internal.encoder.Encoder;
 import androidx.camera.video.internal.encoder.Encoder.SurfaceInput.OnSurfaceUpdateListener;
 import androidx.camera.video.internal.encoder.EncoderFactory;
@@ -288,7 +288,8 @@
             @Nullable VideoValidatedEncoderProfilesProxy resolvedEncoderProfiles,
             @NonNull MediaSpec mediaSpec,
             @NonNull CallbackToFutureAdapter.Completer<Encoder> configureCompleter) {
-        MimeInfo videoMimeInfo = resolveVideoMimeInfo(mediaSpec, resolvedEncoderProfiles);
+        VideoMimeInfo videoMimeInfo = resolveVideoMimeInfo(mediaSpec,
+                surfaceRequest.getDynamicRange(), resolvedEncoderProfiles);
 
         // The VideoSpec from mediaSpec only contains settings requested by the recorder, but
         // the actual settings may need to differ depending on the FPS chosen by the camera.
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioConfigUtil.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioConfigUtil.java
index 4f99fd0..f38d529 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioConfigUtil.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioConfigUtil.java
@@ -16,8 +16,6 @@
 
 package androidx.camera.video.internal.config;
 
-import static java.util.Objects.requireNonNull;
-
 import android.util.Range;
 import android.util.Rational;
 
@@ -61,7 +59,7 @@
     }
 
     /**
-     * Resolves the audio mime information into a {@link MimeInfo}.
+     * Resolves the audio mime information into a {@link AudioMimeInfo}.
      *
      * @param mediaSpec        the media spec to resolve the mime info.
      * @param encoderProfiles  the encoder profiles to resolve the mime info. It can be null if
@@ -69,14 +67,14 @@
      * @return the audio MimeInfo.
      */
     @NonNull
-    public static MimeInfo resolveAudioMimeInfo(@NonNull MediaSpec mediaSpec,
+    public static AudioMimeInfo resolveAudioMimeInfo(@NonNull MediaSpec mediaSpec,
             @Nullable VideoValidatedEncoderProfilesProxy encoderProfiles) {
         String mediaSpecAudioMime = MediaSpec.outputFormatToAudioMime(mediaSpec.getOutputFormat());
         int mediaSpecAudioProfile =
                 MediaSpec.outputFormatToAudioProfile(mediaSpec.getOutputFormat());
         String resolvedAudioMime = mediaSpecAudioMime;
         int resolvedAudioProfile = mediaSpecAudioProfile;
-        boolean encoderProfilesIsCompatible = false;
+        AudioProfileProxy compatibleAudioProfile = null;
         if (encoderProfiles != null && encoderProfiles.getDefaultAudioProfile() != null) {
             AudioProfileProxy audioProfile = encoderProfiles.getDefaultAudioProfile();
             String encoderProfileAudioMime = audioProfile.getMediaType();
@@ -88,7 +86,7 @@
                         + "type: "
                         + resolvedAudioMime + "(profile: " + resolvedAudioProfile + ")]");
             } else if (mediaSpec.getOutputFormat() == MediaSpec.OUTPUT_FORMAT_AUTO) {
-                encoderProfilesIsCompatible = true;
+                compatibleAudioProfile = audioProfile;
                 resolvedAudioMime = encoderProfileAudioMime;
                 resolvedAudioProfile = encoderProfileAudioProfile;
                 Logger.d(TAG, "MediaSpec contains OUTPUT_FORMAT_AUTO. Using EncoderProfiles "
@@ -96,7 +94,7 @@
                         + resolvedAudioMime + "(profile: " + resolvedAudioProfile + ")]");
             } else if (Objects.equals(mediaSpecAudioMime, encoderProfileAudioMime)
                     && mediaSpecAudioProfile == encoderProfileAudioProfile) {
-                encoderProfilesIsCompatible = true;
+                compatibleAudioProfile = audioProfile;
                 resolvedAudioMime = encoderProfileAudioMime;
                 Logger.d(TAG, "MediaSpec audio mime/profile matches EncoderProfiles. "
                         + "Using EncoderProfiles to derive AUDIO settings [mime type: "
@@ -111,10 +109,10 @@
             }
         }
 
-        MimeInfo.Builder mimeInfoBuilder = MimeInfo.builder(resolvedAudioMime)
+        AudioMimeInfo.Builder mimeInfoBuilder = AudioMimeInfo.builder(resolvedAudioMime)
                 .setProfile(resolvedAudioProfile);
-        if (encoderProfilesIsCompatible) {
-            mimeInfoBuilder.setCompatibleEncoderProfiles(encoderProfiles);
+        if (compatibleAudioProfile != null) {
+            mimeInfoBuilder.setCompatibleAudioProfile(compatibleAudioProfile);
         }
 
         return mimeInfoBuilder.build();
@@ -128,13 +126,13 @@
      * @return an AudioSettings.
      */
     @NonNull
-    public static AudioSettings resolveAudioSettings(@NonNull MimeInfo audioMimeInfo,
+    public static AudioSettings resolveAudioSettings(@NonNull AudioMimeInfo audioMimeInfo,
             @NonNull AudioSpec audioSpec) {
         Supplier<AudioSettings> settingsSupplier;
-        VideoValidatedEncoderProfilesProxy profiles = audioMimeInfo.getCompatibleEncoderProfiles();
-        if (profiles != null) {
-            AudioProfileProxy audioProfile = requireNonNull(profiles.getDefaultAudioProfile());
-            settingsSupplier = new AudioSettingsAudioProfileResolver(audioSpec, audioProfile);
+        AudioProfileProxy compatibleAudioProfile = audioMimeInfo.getCompatibleAudioProfile();
+        if (compatibleAudioProfile != null) {
+            settingsSupplier = new AudioSettingsAudioProfileResolver(audioSpec,
+                    compatibleAudioProfile);
         } else {
             settingsSupplier = new AudioSettingsDefaultResolver(audioSpec);
         }
@@ -152,16 +150,15 @@
      * @return a AudioEncoderConfig.
      */
     @NonNull
-    public static AudioEncoderConfig resolveAudioEncoderConfig(@NonNull MimeInfo audioMimeInfo,
+    public static AudioEncoderConfig resolveAudioEncoderConfig(@NonNull AudioMimeInfo audioMimeInfo,
             @NonNull Timebase inputTimebase, @NonNull AudioSettings audioSettings,
             @NonNull AudioSpec audioSpec) {
         Supplier<AudioEncoderConfig> configSupplier;
-        VideoValidatedEncoderProfilesProxy profiles = audioMimeInfo.getCompatibleEncoderProfiles();
-        if (profiles != null) {
-            AudioProfileProxy audioProfile = requireNonNull(profiles.getDefaultAudioProfile());
+        AudioProfileProxy compatibleAudioProfile = audioMimeInfo.getCompatibleAudioProfile();
+        if (compatibleAudioProfile != null) {
             configSupplier = new AudioEncoderConfigAudioProfileResolver(
                     audioMimeInfo.getMimeType(), audioMimeInfo.getProfile(), inputTimebase,
-                    audioSpec, audioSettings, audioProfile);
+                    audioSpec, audioSettings, compatibleAudioProfile);
         } else {
             configSupplier = new AudioEncoderConfigDefaultResolver(audioMimeInfo.getMimeType(),
                     audioMimeInfo.getProfile(), inputTimebase, audioSpec, audioSettings);
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioMimeInfo.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioMimeInfo.java
new file mode 100644
index 0000000..ab94d13
--- /dev/null
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioMimeInfo.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * 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 androidx.camera.video.internal.config;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.impl.EncoderProfilesProxy;
+import androidx.camera.video.internal.encoder.EncoderConfig;
+
+import com.google.auto.value.AutoValue;
+
+/**
+ * Data class containing information about a audio mime.
+ *
+ * <p>The information includes all information from {@link MimeInfo} as well as
+ * compatible configuration types that can be used to resolve settings, such as
+ * {@link EncoderProfilesProxy.AudioProfileProxy}.
+ */
+@SuppressWarnings("NullableProblems") // Problem from AutoValue generated class.
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+@AutoValue
+public abstract class AudioMimeInfo extends MimeInfo {
+
+    /**
+     * Returns compatible {@link EncoderProfilesProxy.AudioProfileProxy} that can be used to
+     * resolve settings.
+     *
+     * <p>If no AudioProfileProxy is provided, returns {@code null}.
+     */
+    @Nullable
+    public abstract EncoderProfilesProxy.AudioProfileProxy getCompatibleAudioProfile();
+
+    /** Creates a builder for the given mime type */
+    @NonNull
+    public static AudioMimeInfo.Builder builder(@NonNull String mimeType) {
+        return new AutoValue_AudioMimeInfo.Builder()
+                .setMimeType(mimeType)
+                .setProfile(EncoderConfig.CODEC_PROFILE_NONE);
+    }
+
+    /** A Builder for an {@link AudioMimeInfo}. */
+    @SuppressWarnings("NullableProblems") // Problem from AutoValue generated class.
+    @AutoValue.Builder
+    public abstract static class Builder extends MimeInfo.Builder<Builder> {
+        /** Sets a compatible {@link EncoderProfilesProxy.AudioProfileProxy} */
+        @NonNull
+        public abstract Builder setCompatibleAudioProfile(
+                @Nullable EncoderProfilesProxy.AudioProfileProxy audioProfile);
+
+        /** Builds a AudioMimeInfo. */
+        @Override
+        @NonNull
+        public abstract AudioMimeInfo build();
+    }
+}
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/MimeInfo.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/MimeInfo.java
index 983626b..3090969 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/MimeInfo.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/MimeInfo.java
@@ -17,12 +17,8 @@
 package androidx.camera.video.internal.config;
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
-import androidx.camera.video.internal.encoder.EncoderConfig;
-
-import com.google.auto.value.AutoValue;
 
 /**
  * Data class containing information about a media mime.
@@ -33,7 +29,7 @@
  */
 @SuppressWarnings("NullableProblems") // Problem from AutoValue generated class.
 @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-@AutoValue
+// Base class for @AutoValue subclasses
 public abstract class MimeInfo {
 
     /** Returns the mime type. */
@@ -50,38 +46,20 @@
     public abstract int getProfile();
 
     /**
-     * Returns compatible {@link VideoValidatedEncoderProfilesProxy} that can be used to resolve
-     * settings.
+     * A Builder for a {@link androidx.camera.video.internal.config.MimeInfo}.
      *
-     * <p>If no EncoderProfiles is provided, returns {@code null}
+     * @param <B> The builder subclass.
      */
-    @Nullable
-    public abstract VideoValidatedEncoderProfilesProxy getCompatibleEncoderProfiles();
+    // Base class for @AutoValue.Builder subclasses
+    public abstract static class Builder<B> {
 
-    /** Creates a builder for the given mime type */
-    @NonNull
-    public static Builder builder(@NonNull String mimeType) {
-        return new AutoValue_MimeInfo.Builder()
-                .setMimeType(mimeType)
-                .setProfile(EncoderConfig.CODEC_PROFILE_NONE);
-    }
-
-    /** A Builder for a {@link androidx.camera.video.internal.config.MimeInfo} */
-    @AutoValue.Builder
-    public abstract static class Builder {
-
-        // Package-private since this should be passed to builder factory method.
+        // Protected since this should be passed to builder factory method.
         @NonNull
-        abstract Builder setMimeType(@NonNull String mimeType);
+        protected abstract B setMimeType(@NonNull String mimeType);
 
         /** Sets the mime profile */
         @NonNull
-        public abstract Builder setProfile(int profile);
-
-        /** Sets a compatible EncoderProfiles */
-        @NonNull
-        public abstract Builder setCompatibleEncoderProfiles(
-                @Nullable VideoValidatedEncoderProfilesProxy encoderProfiles);
+        public abstract B setProfile(int profile);
 
         /** Builds the {@link androidx.camera.video.internal.config.MimeInfo}. */
         @NonNull
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoConfigUtil.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoConfigUtil.java
index 5393edc..3d10c5b 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoConfigUtil.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoConfigUtil.java
@@ -16,6 +16,7 @@
 
 package androidx.camera.video.internal.config;
 
+import android.media.MediaFormat;
 import android.util.Range;
 import android.util.Rational;
 import android.util.Size;
@@ -23,6 +24,7 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
+import androidx.camera.core.DynamicRange;
 import androidx.camera.core.Logger;
 import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy;
 import androidx.camera.core.impl.Timebase;
@@ -30,9 +32,12 @@
 import androidx.camera.video.VideoSpec;
 import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
 import androidx.camera.video.internal.encoder.VideoEncoderConfig;
+import androidx.camera.video.internal.utils.DynamicRangeUtil;
+import androidx.core.util.Preconditions;
 import androidx.core.util.Supplier;
 
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * A collection of utilities used for resolving and debugging video configurations.
@@ -46,60 +51,114 @@
     }
 
     /**
-     * Resolves the video mime information into a {@link MimeInfo}.
+     * Resolves the video mime information into a {@link VideoMimeInfo}.
      *
      * @param mediaSpec        the media spec to resolve the mime info.
+     * @param dynamicRange     a fully specified dynamic range.
      * @param encoderProfiles  the encoder profiles to resolve the mime info. It can be null if
      *                         there is no relevant encoder profiles.
      * @return the video MimeInfo.
      */
     @NonNull
-    public static MimeInfo resolveVideoMimeInfo(@NonNull MediaSpec mediaSpec,
+    public static VideoMimeInfo resolveVideoMimeInfo(@NonNull MediaSpec mediaSpec,
+            @NonNull DynamicRange dynamicRange,
             @Nullable VideoValidatedEncoderProfilesProxy encoderProfiles) {
+        Preconditions.checkState(dynamicRange.isFullySpecified(), "Dynamic range must be a fully "
+                + "specified dynamic range [provided dynamic range: " + dynamicRange + "]");
         String mediaSpecVideoMime = MediaSpec.outputFormatToVideoMime(mediaSpec.getOutputFormat());
         String resolvedVideoMime = mediaSpecVideoMime;
-        boolean encoderProfilesIsCompatible = false;
+        VideoProfileProxy compatibleVideoProfile = null;
         if (encoderProfiles != null) {
-            VideoProfileProxy videoProfile = encoderProfiles.getDefaultVideoProfile();
-            String encoderProfilesVideoMime = videoProfile.getMediaType();
-            // Use EncoderProfiles settings if the media spec's output format is set to auto or
-            // happens to match the EncoderProfiles' output format.
-            if (Objects.equals(encoderProfilesVideoMime, VideoProfileProxy.MEDIA_TYPE_NONE)) {
-                Logger.d(TAG, "EncoderProfiles contains undefined VIDEO mime type so cannot be "
-                        + "used. May rely on fallback defaults to derive settings [chosen mime "
-                        + "type: " + resolvedVideoMime + "]");
-            } else if (mediaSpec.getOutputFormat() == MediaSpec.OUTPUT_FORMAT_AUTO) {
-                encoderProfilesIsCompatible = true;
-                resolvedVideoMime = encoderProfilesVideoMime;
-                Logger.d(TAG, "MediaSpec contains OUTPUT_FORMAT_AUTO. Using EncoderProfiles "
-                        + "to derive VIDEO settings [mime type: " + resolvedVideoMime + "]");
-            } else if (Objects.equals(mediaSpecVideoMime, encoderProfilesVideoMime)) {
-                encoderProfilesIsCompatible = true;
-                resolvedVideoMime = encoderProfilesVideoMime;
-                Logger.d(TAG, "MediaSpec video mime matches EncoderProfiles. Using "
-                        + "EncoderProfiles to derive VIDEO settings [mime type: "
-                        + resolvedVideoMime + "]");
-            } else {
-                Logger.d(TAG, "MediaSpec video mime does not match EncoderProfiles, so "
-                        + "EncoderProfiles settings cannot be used. May rely on fallback "
-                        + "defaults to derive VIDEO settings [EncoderProfiles mime type: "
-                        + encoderProfilesVideoMime + ", chosen mime type: "
-                        + resolvedVideoMime + "]");
+            Set<Integer> encoderHdrFormats =
+                    DynamicRangeUtil.dynamicRangeToVideoProfileHdrFormats(dynamicRange);
+            Set<Integer> encoderBitDepths =
+                    DynamicRangeUtil.dynamicRangeToVideoProfileBitDepth(dynamicRange);
+            // Loop through EncoderProfile's VideoProfiles to search for one that supports the
+            // provided dynamic range.
+            for (VideoProfileProxy videoProfile : encoderProfiles.getVideoProfiles()) {
+                // Skip if the dynamic range is not compatible
+                if (!encoderHdrFormats.contains(videoProfile.getHdrFormat())
+                        || !encoderBitDepths.contains(videoProfile.getBitDepth())) {
+                    continue;
+                }
+
+                // Dynamic range is compatible. Use EncoderProfiles settings if the media spec's
+                // output format is set to auto or happens to match the EncoderProfiles' output
+                // format.
+                String videoProfileMime = videoProfile.getMediaType();
+                if (Objects.equals(mediaSpecVideoMime, videoProfileMime)) {
+                    Logger.d(TAG, "MediaSpec video mime matches EncoderProfiles. Using "
+                            + "EncoderProfiles to derive VIDEO settings [mime type: "
+                            + resolvedVideoMime + "]");
+                } else if (mediaSpec.getOutputFormat() == MediaSpec.OUTPUT_FORMAT_AUTO) {
+                    Logger.d(TAG, "MediaSpec contains OUTPUT_FORMAT_AUTO. Using CamcorderProfile "
+                            + "to derive VIDEO settings [mime type: " + resolvedVideoMime + ", "
+                            + "dynamic range: " + dynamicRange + "]");
+                } else {
+                    continue;
+                }
+
+                compatibleVideoProfile = videoProfile;
+                resolvedVideoMime = videoProfileMime;
+                break;
             }
-        } else {
-            Logger.d(TAG, "No EncoderProfiles present. May rely on fallback defaults to derive "
-                    + "VIDEO settings [chosen mime type: " + resolvedVideoMime + "]");
         }
 
-        MimeInfo.Builder mimeInfoBuilder = MimeInfo.builder(resolvedVideoMime);
-        if (encoderProfilesIsCompatible) {
-            mimeInfoBuilder.setCompatibleEncoderProfiles(encoderProfiles);
+        if (compatibleVideoProfile == null) {
+            if (mediaSpec.getOutputFormat() == MediaSpec.OUTPUT_FORMAT_AUTO) {
+                // If output format is AUTO, use the dynamic range to get the mime. Otherwise we
+                // fall back to the default mime type from MediaSpec
+                resolvedVideoMime = getDynamicRangeDefaultMime(dynamicRange);
+            }
+
+            if (encoderProfiles == null) {
+                Logger.d(TAG, "No EncoderProfiles present. May rely on fallback defaults to derive "
+                        + "VIDEO settings [chosen mime type: " + resolvedVideoMime + ", "
+                        + "dynamic range: " + dynamicRange + "]");
+            } else {
+                Logger.d(TAG, "No video EncoderProfile is compatible with requested output format"
+                        + " and dynamic range. May rely on fallback defaults to derive VIDEO "
+                        + "settings [chosen mime type: " + resolvedVideoMime + ", "
+                        + "dynamic range: " + dynamicRange + "]");
+            }
+        }
+
+        VideoMimeInfo.Builder mimeInfoBuilder = VideoMimeInfo.builder(resolvedVideoMime);
+        if (compatibleVideoProfile != null) {
+            mimeInfoBuilder.setCompatibleVideoProfile(compatibleVideoProfile);
         }
 
         return mimeInfoBuilder.build();
     }
 
     /**
+     * Returns a list of mimes required for the given dynamic range.
+     *
+     * <p>If the dynamic range is not supported, an {@link UnsupportedOperationException} will be
+     * thrown.
+     */
+    @NonNull
+    private static String getDynamicRangeDefaultMime(@NonNull DynamicRange dynamicRange) {
+        switch (dynamicRange.getEncoding()) {
+            case DynamicRange.ENCODING_DOLBY_VISION:
+                // Dolby vision only supports dolby vision encoders
+                return MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION;
+            case DynamicRange.ENCODING_HLG:
+            case DynamicRange.ENCODING_HDR10:
+            case DynamicRange.ENCODING_HDR10_PLUS:
+                // For now most hdr formats default to h265 (HEVC), though VP9 or AV1 may also be
+                // supported.
+                return MediaFormat.MIMETYPE_VIDEO_HEVC;
+            case DynamicRange.ENCODING_SDR:
+                // For SDR, default to h264 (AVC)
+                return MediaFormat.MIMETYPE_VIDEO_AVC;
+            default:
+                throw new UnsupportedOperationException("Unsupported dynamic range: " + dynamicRange
+                        + "\nNo supported default mime type available.");
+        }
+    }
+
+    /**
      * Resolves video related information into a {@link VideoEncoderConfig}.
      *
      * @param videoMimeInfo          the video mime info.
@@ -110,15 +169,15 @@
      * @return a VideoEncoderConfig.
      */
     @NonNull
-    public static VideoEncoderConfig resolveVideoEncoderConfig(@NonNull MimeInfo videoMimeInfo,
+    public static VideoEncoderConfig resolveVideoEncoderConfig(@NonNull VideoMimeInfo videoMimeInfo,
             @NonNull Timebase inputTimebase, @NonNull VideoSpec videoSpec,
             @NonNull Size surfaceSize, @NonNull Range<Integer> expectedFrameRateRange) {
         Supplier<VideoEncoderConfig> configSupplier;
-        VideoValidatedEncoderProfilesProxy profiles = videoMimeInfo.getCompatibleEncoderProfiles();
-        if (profiles != null) {
+        VideoProfileProxy videoProfile = videoMimeInfo.getCompatibleVideoProfile();
+        if (videoProfile != null) {
             configSupplier = new VideoEncoderConfigVideoProfileResolver(
                     videoMimeInfo.getMimeType(), inputTimebase, videoSpec, surfaceSize,
-                    profiles.getDefaultVideoProfile(), expectedFrameRateRange);
+                    videoProfile, expectedFrameRateRange);
         } else {
             configSupplier = new VideoEncoderConfigDefaultResolver(videoMimeInfo.getMimeType(),
                     inputTimebase, videoSpec, surfaceSize, expectedFrameRateRange);
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoMimeInfo.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoMimeInfo.java
new file mode 100644
index 0000000..f1e7323
--- /dev/null
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoMimeInfo.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * 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 androidx.camera.video.internal.config;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.impl.EncoderProfilesProxy;
+import androidx.camera.video.internal.encoder.EncoderConfig;
+
+import com.google.auto.value.AutoValue;
+
+/**
+ * Data class containing information about a video mime.
+ *
+ * <p>The information includes all information from {@link MimeInfo} as well as
+ * compatible configuration types that can be used to resolve settings, such as
+ * {@link EncoderProfilesProxy.VideoProfileProxy}.
+ */
+@SuppressWarnings("NullableProblems") // Problem from AutoValue generated class.
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+@AutoValue
+public abstract class VideoMimeInfo extends MimeInfo {
+
+    /**
+     * Returns compatible {@link EncoderProfilesProxy.VideoProfileProxy} that can be used to
+     * resolve settings.
+     *
+     * <p>If no VideoProfileProxy is provided, returns {@code null}.
+     */
+    @Nullable
+    public abstract EncoderProfilesProxy.VideoProfileProxy getCompatibleVideoProfile();
+
+    /** Creates a builder for the given mime type */
+    @NonNull
+    public static VideoMimeInfo.Builder builder(@NonNull String mimeType) {
+        return new AutoValue_VideoMimeInfo.Builder()
+                .setMimeType(mimeType)
+                .setProfile(EncoderConfig.CODEC_PROFILE_NONE);
+    }
+
+    /** A Builder for a {@link VideoMimeInfo}. */
+    @SuppressWarnings("NullableProblems") // Problem from AutoValue generated class.
+    @AutoValue.Builder
+    public abstract static class Builder extends MimeInfo.Builder<Builder> {
+        /** Sets a compatible {@link EncoderProfilesProxy.VideoProfileProxy} */
+        @NonNull
+        public abstract Builder setCompatibleVideoProfile(
+                @Nullable EncoderProfilesProxy.VideoProfileProxy videoProfile);
+
+        /** Builds a VideoMimeInfo. */
+        @Override
+        @NonNull
+        public abstract VideoMimeInfo build();
+    }
+}
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/utils/DynamicRangeUtil.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/utils/DynamicRangeUtil.java
index 63e67ae..0f27e50 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/utils/DynamicRangeUtil.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/utils/DynamicRangeUtil.java
@@ -38,8 +38,11 @@
 import static java.util.Arrays.asList;
 import static java.util.Collections.singletonList;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
+import androidx.camera.core.DynamicRange;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -84,4 +87,43 @@
         VP_TO_DR_FORMAT_MAP.put(HDR_HDR10PLUS, ENCODING_HDR10_PLUS);
         VP_TO_DR_FORMAT_MAP.put(HDR_DOLBY_VISION, ENCODING_DOLBY_VISION);
     }
+
+    /**
+     * Returns a set of possible HDR formats for the given {@link DynamicRange}.
+     *
+     * <p>The returned HDR formats are those defined in
+     * {@link android.media.EncoderProfiles.VideoProfile} prefixed with {@code HDR_}, such as
+     * {@link android.media.EncoderProfiles.VideoProfile#HDR_HLG}.
+     *
+     * <p>Returns an empty set if no HDR formats are supported for the provided dynamic range.
+     */
+    @NonNull
+    public static Set<Integer> dynamicRangeToVideoProfileHdrFormats(
+            @NonNull DynamicRange dynamicRange) {
+        Set<Integer> hdrFormats = DR_TO_VP_FORMAT_MAP.get(dynamicRange.getEncoding());
+        if (hdrFormats == null) {
+            hdrFormats = Collections.emptySet();
+        }
+        return hdrFormats;
+    }
+
+    /**
+     * Returns a set of possible bit depths for the given {@link DynamicRange}.
+     *
+     * <p>The returned bit depths are the defined in
+     * {@link androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy} prefixed with {@code
+     * BIT_DEPTH_}, such as
+     * {@link androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy#BIT_DEPTH_10}.
+     *
+     * <p>Returns an empty set if no bit depths are supported for the provided dynamic range.
+     */
+    @NonNull
+    public static Set<Integer> dynamicRangeToVideoProfileBitDepth(
+            @NonNull DynamicRange dynamicRange) {
+        Set<Integer> bitDepths = DR_TO_VP_BIT_DEPTH_MAP.get(dynamicRange.getBitDepth());
+        if (bitDepths == null) {
+            bitDepths = Collections.emptySet();
+        }
+        return bitDepths;
+    }
 }
diff --git a/camera/camera-video/src/test/java/androidx/camera/video/internal/config/VideoConfigUtilTest.kt b/camera/camera-video/src/test/java/androidx/camera/video/internal/config/VideoConfigUtilTest.kt
new file mode 100644
index 0000000..1b7a609
--- /dev/null
+++ b/camera/camera-video/src/test/java/androidx/camera/video/internal/config/VideoConfigUtilTest.kt
@@ -0,0 +1,201 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * 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 androidx.camera.video.internal.config
+
+import android.media.EncoderProfiles
+import android.media.MediaFormat
+import android.media.MediaRecorder
+import android.os.Build
+import androidx.camera.core.DynamicRange
+import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy
+import androidx.camera.testing.EncoderProfilesUtil
+import androidx.camera.video.MediaSpec
+import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.internal.DoNotInstrument
+
+@RunWith(RobolectricTestRunner::class)
+@DoNotInstrument
+@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
+class VideoConfigUtilTest {
+
+    @Test
+    fun videoMimeInfo_resolvesFromDynamicRange_noCompatibleProfile() {
+        val videoMimeInfo = VideoConfigUtil.resolveVideoMimeInfo(
+            createMediaSpec(),
+            DynamicRange.HLG_10_BIT,
+            createFakeEncoderProfiles(listOf(VIDEO_PROFILE_DEFAULT))
+        )
+
+        assertThat(videoMimeInfo.compatibleVideoProfile).isNull()
+        assertThat(videoMimeInfo.mimeType).isEqualTo(MediaFormat.MIMETYPE_VIDEO_HEVC)
+    }
+
+    @Test
+    fun videoMimeInfo_resolvesFromDynamicRange_withCompatibleProfile() {
+        val videoMimeInfo = VideoConfigUtil.resolveVideoMimeInfo(
+            createMediaSpec(outputFormat = MediaSpec.OUTPUT_FORMAT_AUTO),
+            DynamicRange.HLG_10_BIT,
+            createFakeEncoderProfiles(listOf(
+                VIDEO_PROFILE_DEFAULT,
+                VIDEO_PROFILE_HEVC_HLG10,
+                VIDEO_PROFILE_DOLBY_VISION_10_BIT
+            ))
+        )
+
+        val compatibleProfile = videoMimeInfo.compatibleVideoProfile
+        assertThat(videoMimeInfo.compatibleVideoProfile).isEqualTo(VIDEO_PROFILE_HEVC_HLG10)
+        assertThat(videoMimeInfo.mimeType).isEqualTo(compatibleProfile!!.mediaType)
+    }
+
+    @Test
+    fun videoMimeInfo_ignoresVideoProfiles_withIncompatibleOutputFormat() {
+        val videoMimeInfo = VideoConfigUtil.resolveVideoMimeInfo(
+            createMediaSpec(outputFormat = MediaSpec.OUTPUT_FORMAT_MPEG_4),
+            DynamicRange.HLG_10_BIT,
+            createFakeEncoderProfiles(listOf(
+                VIDEO_PROFILE_DEFAULT,
+                VIDEO_PROFILE_VP9_HLG10 // VP9 uses WebM format
+            ))
+        )
+
+        assertThat(videoMimeInfo.compatibleVideoProfile).isNull()
+    }
+
+    @Test
+    fun videoMimeInfo_ignoresVideoProfiles_withIncompatibleDynamicRange() {
+        val videoMimeInfo = VideoConfigUtil.resolveVideoMimeInfo(
+            createMediaSpec(),
+            DynamicRange.DOLBY_VISION_10_BIT,
+            createFakeEncoderProfiles(listOf(
+                VIDEO_PROFILE_DEFAULT,
+                VIDEO_PROFILE_DOLBY_VISION_8_BIT // Dolby vision 8-bit, when 10-bit is passed in
+            ))
+        )
+
+        assertThat(videoMimeInfo.compatibleVideoProfile).isNull()
+        assertThat(videoMimeInfo.mimeType).isEqualTo(MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION)
+    }
+
+    @Test
+    fun videoMimeInfo_resolvesFromMatchingMime() {
+        val expectedProfileMap = mapOf(
+            DynamicRange.SDR to VIDEO_PROFILE_DEFAULT,
+            DynamicRange.HLG_10_BIT to VIDEO_PROFILE_HEVC_HLG10,
+            DynamicRange.HDR10_10_BIT to VIDEO_PROFILE_HEVC_HDR10,
+            DynamicRange.HDR10_PLUS_10_BIT to VIDEO_PROFILE_HEVC_HDR10_PLUS,
+            DynamicRange.DOLBY_VISION_10_BIT to VIDEO_PROFILE_DOLBY_VISION_10_BIT,
+            DynamicRange.DOLBY_VISION_8_BIT to VIDEO_PROFILE_DOLBY_VISION_8_BIT
+        )
+        val encoderProfiles = createFakeEncoderProfiles(expectedProfileMap.values.toList())
+
+        for (dynamicRangeAndExpectedProfile in expectedProfileMap) {
+            val dynamicRange = dynamicRangeAndExpectedProfile.key
+
+            val videoMimeInfo = VideoConfigUtil.resolveVideoMimeInfo(
+                createMediaSpec(),
+                dynamicRange,
+                encoderProfiles
+            )
+
+            val expectedVideoProfile = dynamicRangeAndExpectedProfile.value
+            assertThat(videoMimeInfo.compatibleVideoProfile).isEqualTo(expectedVideoProfile)
+            assertThat(videoMimeInfo.mimeType).isEqualTo(expectedVideoProfile.mediaType)
+        }
+    }
+
+    companion object {
+        fun createFakeEncoderProfiles(videoProfileProxies: List<VideoProfileProxy>) =
+            VideoValidatedEncoderProfilesProxy.create(
+                EncoderProfilesUtil.DEFAULT_DURATION,
+                EncoderProfilesUtil.DEFAULT_OUTPUT_FORMAT,
+                emptyList(),
+                videoProfileProxies
+            )
+
+        fun createMediaSpec(outputFormat: Int = MediaSpec.OUTPUT_FORMAT_AUTO) =
+            MediaSpec.builder().apply {
+                setOutputFormat(outputFormat)
+            }.build()
+
+        private const val DEFAULT_VIDEO_WIDTH = 1920
+        private const val DEFAULT_VIDEO_HEIGHT = 1080
+
+        val VIDEO_PROFILE_DEFAULT = EncoderProfilesUtil.createFakeVideoProfileProxy(
+            DEFAULT_VIDEO_WIDTH,
+            DEFAULT_VIDEO_HEIGHT
+        )
+
+        val VIDEO_PROFILE_HEVC_HLG10 = EncoderProfilesUtil.createFakeVideoProfileProxy(
+            DEFAULT_VIDEO_WIDTH,
+            DEFAULT_VIDEO_HEIGHT,
+            videoCodec = MediaRecorder.VideoEncoder.HEVC,
+            videoMediaType = MediaFormat.MIMETYPE_VIDEO_HEVC,
+            videoHdrFormat = EncoderProfiles.VideoProfile.HDR_HLG,
+            videoBitDepth = VideoProfileProxy.BIT_DEPTH_10
+        )
+
+        val VIDEO_PROFILE_HEVC_HDR10 = EncoderProfilesUtil.createFakeVideoProfileProxy(
+            DEFAULT_VIDEO_WIDTH,
+            DEFAULT_VIDEO_HEIGHT,
+            videoCodec = MediaRecorder.VideoEncoder.HEVC,
+            videoMediaType = MediaFormat.MIMETYPE_VIDEO_HEVC,
+            videoHdrFormat = EncoderProfiles.VideoProfile.HDR_HDR10,
+            videoBitDepth = VideoProfileProxy.BIT_DEPTH_10
+        )
+
+        val VIDEO_PROFILE_HEVC_HDR10_PLUS = EncoderProfilesUtil.createFakeVideoProfileProxy(
+            DEFAULT_VIDEO_WIDTH,
+            DEFAULT_VIDEO_HEIGHT,
+            videoCodec = MediaRecorder.VideoEncoder.HEVC,
+            videoMediaType = MediaFormat.MIMETYPE_VIDEO_HEVC,
+            videoHdrFormat = EncoderProfiles.VideoProfile.HDR_HDR10PLUS,
+            videoBitDepth = VideoProfileProxy.BIT_DEPTH_10
+        )
+
+        val VIDEO_PROFILE_DOLBY_VISION_10_BIT = EncoderProfilesUtil.createFakeVideoProfileProxy(
+            DEFAULT_VIDEO_WIDTH,
+            DEFAULT_VIDEO_HEIGHT,
+            videoCodec = MediaRecorder.VideoEncoder.DOLBY_VISION,
+            videoMediaType = MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION,
+            videoHdrFormat = EncoderProfiles.VideoProfile.HDR_DOLBY_VISION,
+            videoBitDepth = VideoProfileProxy.BIT_DEPTH_10
+        )
+
+        val VIDEO_PROFILE_DOLBY_VISION_8_BIT = EncoderProfilesUtil.createFakeVideoProfileProxy(
+            DEFAULT_VIDEO_WIDTH,
+            DEFAULT_VIDEO_HEIGHT,
+            videoCodec = MediaRecorder.VideoEncoder.DOLBY_VISION,
+            videoMediaType = MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION,
+            videoHdrFormat = EncoderProfiles.VideoProfile.HDR_DOLBY_VISION,
+            videoBitDepth = VideoProfileProxy.BIT_DEPTH_8
+        )
+
+        val VIDEO_PROFILE_VP9_HLG10 = EncoderProfilesUtil.createFakeVideoProfileProxy(
+            DEFAULT_VIDEO_WIDTH,
+            DEFAULT_VIDEO_HEIGHT,
+            videoCodec = MediaRecorder.VideoEncoder.VP9,
+            videoMediaType = MediaFormat.MIMETYPE_VIDEO_VP9,
+            videoHdrFormat = EncoderProfiles.VideoProfile.HDR_HLG,
+            videoBitDepth = VideoProfileProxy.BIT_DEPTH_10
+        )
+    }
+}
\ No newline at end of file
diff --git a/camera/camera-view/api/current.txt b/camera/camera-view/api/current.txt
index 440119d..d50aed9 100644
--- a/camera/camera-view/api/current.txt
+++ b/camera/camera-view/api/current.txt
@@ -20,15 +20,15 @@
     method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
     method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTapToFocusState();
     method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
-    method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Quality? getVideoCaptureTargetQuality();
+    method @MainThread public androidx.camera.video.Quality? getVideoCaptureTargetQuality();
     method @MainThread public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> getZoomState();
     method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector);
     method @MainThread public boolean isImageAnalysisEnabled();
     method @MainThread public boolean isImageCaptureEnabled();
     method @MainThread public boolean isPinchToZoomEnabled();
-    method @MainThread @androidx.camera.view.video.ExperimentalVideo public boolean isRecording();
+    method @MainThread public boolean isRecording();
     method @MainThread public boolean isTapToFocusEnabled();
-    method @MainThread @androidx.camera.view.video.ExperimentalVideo public boolean isVideoCaptureEnabled();
+    method @MainThread public boolean isVideoCaptureEnabled();
     method @MainThread public void setCameraSelector(androidx.camera.core.CameraSelector);
     method @MainThread public void setEffects(java.util.Set<androidx.camera.core.CameraEffect!>);
     method @MainThread public void setEnabledUseCases(int);
@@ -45,11 +45,11 @@
     method @MainThread public void setPinchToZoomEnabled(boolean);
     method @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
     method @MainThread public void setTapToFocusEnabled(boolean);
-    method @MainThread @androidx.camera.view.video.ExperimentalVideo public void setVideoCaptureTargetQuality(androidx.camera.video.Quality?);
+    method @MainThread public void setVideoCaptureTargetQuality(androidx.camera.video.Quality?);
     method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
-    method @MainThread @RequiresApi(26) @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
-    method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
-    method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.MediaStoreOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
+    method @MainThread @RequiresApi(26) public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
+    method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
+    method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.MediaStoreOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
     method @MainThread public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
     method @MainThread public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
     field public static final int COORDINATE_SYSTEM_VIEW_REFERENCED = 1; // 0x1
@@ -60,7 +60,7 @@
     field public static final int TAP_TO_FOCUS_NOT_FOCUSED = 3; // 0x3
     field public static final int TAP_TO_FOCUS_NOT_STARTED = 0; // 0x0
     field public static final int TAP_TO_FOCUS_STARTED = 1; // 0x1
-    field @androidx.camera.view.video.ExperimentalVideo public static final int VIDEO_CAPTURE = 4; // 0x4
+    field public static final int VIDEO_CAPTURE = 4; // 0x4
   }
 
   @RequiresApi(21) public static final class CameraController.OutputSize {
@@ -163,14 +163,11 @@
 
 package androidx.camera.view.video {
 
-  @RequiresApi(21) @androidx.camera.view.video.ExperimentalVideo public class AudioConfig {
+  @RequiresApi(21) public class AudioConfig {
     method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public static androidx.camera.view.video.AudioConfig create(boolean);
     method public boolean getAudioEnabled();
     field public static final androidx.camera.view.video.AudioConfig AUDIO_DISABLED;
   }
 
-  @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalVideo {
-  }
-
 }
 
diff --git a/camera/camera-view/api/restricted_current.txt b/camera/camera-view/api/restricted_current.txt
index 440119d..d50aed9 100644
--- a/camera/camera-view/api/restricted_current.txt
+++ b/camera/camera-view/api/restricted_current.txt
@@ -20,15 +20,15 @@
     method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
     method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTapToFocusState();
     method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
-    method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Quality? getVideoCaptureTargetQuality();
+    method @MainThread public androidx.camera.video.Quality? getVideoCaptureTargetQuality();
     method @MainThread public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> getZoomState();
     method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector);
     method @MainThread public boolean isImageAnalysisEnabled();
     method @MainThread public boolean isImageCaptureEnabled();
     method @MainThread public boolean isPinchToZoomEnabled();
-    method @MainThread @androidx.camera.view.video.ExperimentalVideo public boolean isRecording();
+    method @MainThread public boolean isRecording();
     method @MainThread public boolean isTapToFocusEnabled();
-    method @MainThread @androidx.camera.view.video.ExperimentalVideo public boolean isVideoCaptureEnabled();
+    method @MainThread public boolean isVideoCaptureEnabled();
     method @MainThread public void setCameraSelector(androidx.camera.core.CameraSelector);
     method @MainThread public void setEffects(java.util.Set<androidx.camera.core.CameraEffect!>);
     method @MainThread public void setEnabledUseCases(int);
@@ -45,11 +45,11 @@
     method @MainThread public void setPinchToZoomEnabled(boolean);
     method @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
     method @MainThread public void setTapToFocusEnabled(boolean);
-    method @MainThread @androidx.camera.view.video.ExperimentalVideo public void setVideoCaptureTargetQuality(androidx.camera.video.Quality?);
+    method @MainThread public void setVideoCaptureTargetQuality(androidx.camera.video.Quality?);
     method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
-    method @MainThread @RequiresApi(26) @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
-    method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
-    method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.MediaStoreOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
+    method @MainThread @RequiresApi(26) public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
+    method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
+    method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.MediaStoreOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
     method @MainThread public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
     method @MainThread public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
     field public static final int COORDINATE_SYSTEM_VIEW_REFERENCED = 1; // 0x1
@@ -60,7 +60,7 @@
     field public static final int TAP_TO_FOCUS_NOT_FOCUSED = 3; // 0x3
     field public static final int TAP_TO_FOCUS_NOT_STARTED = 0; // 0x0
     field public static final int TAP_TO_FOCUS_STARTED = 1; // 0x1
-    field @androidx.camera.view.video.ExperimentalVideo public static final int VIDEO_CAPTURE = 4; // 0x4
+    field public static final int VIDEO_CAPTURE = 4; // 0x4
   }
 
   @RequiresApi(21) public static final class CameraController.OutputSize {
@@ -163,14 +163,11 @@
 
 package androidx.camera.view.video {
 
-  @RequiresApi(21) @androidx.camera.view.video.ExperimentalVideo public class AudioConfig {
+  @RequiresApi(21) public class AudioConfig {
     method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public static androidx.camera.view.video.AudioConfig create(boolean);
     method public boolean getAudioEnabled();
     field public static final androidx.camera.view.video.AudioConfig AUDIO_DISABLED;
   }
 
-  @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalVideo {
-  }
-
 }
 
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java b/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
index d491b94..27fb542 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
@@ -84,7 +84,6 @@
 import androidx.camera.video.VideoRecordEvent;
 import androidx.camera.view.transform.OutputTransform;
 import androidx.camera.view.video.AudioConfig;
-import androidx.camera.view.video.ExperimentalVideo;
 import androidx.core.content.PermissionChecker;
 import androidx.core.util.Consumer;
 import androidx.core.util.Preconditions;
@@ -192,7 +191,6 @@
     /**
      * Bitmask options to enable/disable use cases.
      */
-    @OptIn(markerClass = ExperimentalVideo.class)
     @Retention(RetentionPolicy.SOURCE)
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     @IntDef(flag = true, value = {IMAGE_CAPTURE, IMAGE_ANALYSIS, VIDEO_CAPTURE})
@@ -213,7 +211,6 @@
      * Bitmask option to enable video capture use case. In {@link #setEnabledUseCases}, if
      * (enabledUseCases & VIDEO_CAPTURE) != 0, then controller will enable video capture features.
      */
-    @ExperimentalVideo
     public static final int VIDEO_CAPTURE = 1 << 2;
 
     CameraSelector mCameraSelector = CameraSelector.DEFAULT_BACK_CAMERA;
@@ -472,7 +469,6 @@
      * @see ImageAnalysis
      */
     @MainThread
-    @OptIn(markerClass = ExperimentalVideo.class)
     public void setEnabledUseCases(@UseCases int enabledUseCases) {
         checkMainThread();
         if (enabledUseCases == mEnabledUseCases) {
@@ -1135,7 +1131,6 @@
      * <p> Video capture is disabled by default. It has to be enabled before
      * {@link #startRecording} can be called.
      */
-    @ExperimentalVideo
     @MainThread
     public boolean isVideoCaptureEnabled() {
         checkMainThread();
@@ -1169,7 +1164,6 @@
      *                               is denied.
      */
     @SuppressLint("MissingPermission")
-    @ExperimentalVideo
     @MainThread
     @NonNull
     public Recording startRecording(
@@ -1210,7 +1204,6 @@
      *                               is denied.
      */
     @SuppressLint("MissingPermission")
-    @ExperimentalVideo
     @RequiresApi(26)
     @MainThread
     @NonNull
@@ -1249,7 +1242,6 @@
      *                               is denied.
      */
     @SuppressLint("MissingPermission")
-    @ExperimentalVideo
     @MainThread
     @NonNull
     public Recording startRecording(
@@ -1261,7 +1253,6 @@
     }
 
     @RequiresPermission(Manifest.permission.RECORD_AUDIO)
-    @ExperimentalVideo
     @MainThread
     private Recording startRecordingInternal(
             @NonNull OutputOptions outputOptions,
@@ -1307,7 +1298,6 @@
      * hand, the public {@code startRecording()} is overloaded with subclasses. The reason is to
      * enforce compile-time check for API levels.
      */
-    @ExperimentalVideo
     @MainThread
     private PendingRecording prepareRecording(@NonNull OutputOptions options) {
         Recorder recorder = mVideoCapture.getOutput();
@@ -1327,7 +1317,6 @@
         }
     }
 
-    @ExperimentalVideo
     private Consumer<VideoRecordEvent> wrapListenerToDeactivateRecordingOnFinalized(
             @NonNull final Consumer<VideoRecordEvent> listener) {
         final Executor mainExecutor = getMainExecutor(mAppContext);
@@ -1348,7 +1337,6 @@
         };
     }
 
-    @ExperimentalVideo
     @MainThread
     void deactivateRecordingByListener(@NonNull Consumer<VideoRecordEvent> listener) {
         Recording recording = mRecordingMap.remove(listener);
@@ -1360,7 +1348,6 @@
     /**
      * Clears the active video recording reference if the recording to be deactivated matches.
      */
-    @ExperimentalVideo
     @MainThread
     private void deactivateRecording(@NonNull Recording recording) {
         if (mActiveRecording == recording) {
@@ -1368,7 +1355,6 @@
         }
     }
 
-    @ExperimentalVideo
     @MainThread
     private void setActiveRecording(
             @NonNull Recording recording,
@@ -1385,7 +1371,6 @@
      * <p> If the recording completes successfully, a {@link VideoRecordEvent.Finalize} event with
      * {@link VideoRecordEvent.Finalize#ERROR_NONE} will be sent to the provided listener.
      */
-    @ExperimentalVideo
     @MainThread
     private void stopRecording() {
         checkMainThread();
@@ -1399,7 +1384,6 @@
     /**
      * Returns whether there is an in-progress video recording.
      */
-    @ExperimentalVideo
     @MainThread
     public boolean isRecording() {
         checkMainThread();
@@ -1423,7 +1407,6 @@
      *
      * @param targetQuality the intended video quality for {@code VideoCapture}.
      */
-    @ExperimentalVideo
     @MainThread
     public void setVideoCaptureTargetQuality(@Nullable Quality targetQuality) {
         checkMainThread();
@@ -1439,7 +1422,6 @@
      * Returns the intended quality for {@code VideoCapture} set by
      * {@link #setVideoCaptureTargetQuality(Quality)}, or null if not set.
      */
-    @ExperimentalVideo
     @MainThread
     @Nullable
     public Quality getVideoCaptureTargetQuality() {
@@ -1990,7 +1972,6 @@
      */
     @Nullable
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    @OptIn(markerClass = {ExperimentalVideo.class})
     protected UseCaseGroup createUseCaseGroup() {
         if (!isCameraInitialized()) {
             Logger.d(TAG, CAMERA_NOT_INITIALIZED);
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/video/AudioConfig.java b/camera/camera-view/src/main/java/androidx/camera/view/video/AudioConfig.java
index 67977b7..400c25e 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/video/AudioConfig.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/video/AudioConfig.java
@@ -26,7 +26,6 @@
  * A class providing configuration for audio settings in the video recording.
  */
 @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-@ExperimentalVideo
 public class AudioConfig {
 
     /**
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/video/ExperimentalVideo.java b/camera/camera-view/src/main/java/androidx/camera/view/video/ExperimentalVideo.java
deleted file mode 100644
index 6e4a804..0000000
--- a/camera/camera-view/src/main/java/androidx/camera/view/video/ExperimentalVideo.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2020 The Android Open Source Project
- *
- * 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 androidx.camera.view.video;
-
-import static java.lang.annotation.RetentionPolicy.CLASS;
-
-import androidx.annotation.RequiresOptIn;
-
-import java.lang.annotation.Retention;
-
-/**
- * Denotes that the annotated method uses the experimental methods which allow for video
- * recording.
- *
- * <p>Video recording API signatures within the {@code camera-view} artifact may change in future
- * releases, or may be removed altogether.
- */
-@Retention(CLASS)
-@RequiresOptIn
-public @interface ExperimentalVideo {
-}
diff --git a/camera/integration-tests/diagnosetestapp/src/main/java/androidx/camera/integration/diagnose/MainActivity.kt b/camera/integration-tests/diagnosetestapp/src/main/java/androidx/camera/integration/diagnose/MainActivity.kt
index 4327c6d..5abea5c 100644
--- a/camera/integration-tests/diagnosetestapp/src/main/java/androidx/camera/integration/diagnose/MainActivity.kt
+++ b/camera/integration-tests/diagnosetestapp/src/main/java/androidx/camera/integration/diagnose/MainActivity.kt
@@ -28,7 +28,6 @@
 import android.view.View
 import android.widget.Button
 import android.widget.Toast
-import androidx.annotation.OptIn
 import androidx.appcompat.app.AppCompatActivity
 import androidx.camera.core.ImageCapture
 import androidx.camera.core.ImageCaptureException
@@ -43,7 +42,6 @@
 import androidx.camera.view.LifecycleCameraController
 import androidx.camera.view.PreviewView
 import androidx.camera.view.video.AudioConfig
-import androidx.camera.view.video.ExperimentalVideo
 import androidx.core.app.ActivityCompat
 import androidx.core.content.ContextCompat
 import androidx.core.util.Preconditions
@@ -62,7 +60,6 @@
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 
-@OptIn(ExperimentalVideo::class)
 @SuppressLint("NullAnnotationGroup", "MissingPermission")
 class MainActivity : AppCompatActivity() {
 
diff --git a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CameraControllerFragment.java b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CameraControllerFragment.java
index 1d771cc..8a33987 100644
--- a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CameraControllerFragment.java
+++ b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CameraControllerFragment.java
@@ -56,7 +56,6 @@
 import androidx.annotation.MainThread;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.annotation.OptIn;
 import androidx.annotation.RequiresPermission;
 import androidx.annotation.VisibleForTesting;
 import androidx.camera.core.CameraSelector;
@@ -76,7 +75,6 @@
 import androidx.camera.view.PreviewView;
 import androidx.camera.view.RotationProvider;
 import androidx.camera.view.video.AudioConfig;
-import androidx.camera.view.video.ExperimentalVideo;
 import androidx.core.util.Consumer;
 import androidx.fragment.app.Fragment;
 import androidx.lifecycle.LiveData;
@@ -187,7 +185,6 @@
     @RequiresPermission(Manifest.permission.RECORD_AUDIO)
     @NonNull
     @Override
-    @OptIn(markerClass = ExperimentalVideo.class)
     public View onCreateView(
             @NonNull LayoutInflater inflater,
             @Nullable ViewGroup container,
@@ -446,7 +443,6 @@
     /**
      * Updates UI text based on the state of {@link #mCameraController}.
      */
-    @OptIn(markerClass = ExperimentalVideo.class)
     private void updateUiText() {
         mFlashMode.setText(getFlashModeTextResId());
         final Integer lensFacing = mCameraController.getCameraSelector().getLensFacing();
@@ -503,7 +499,6 @@
         }
     }
 
-    @OptIn(markerClass = ExperimentalVideo.class)
     private void onUseCaseToggled(CompoundButton compoundButton, boolean value) {
         if (mCaptureEnabledToggle == null || mAnalysisEnabledToggle == null
                 || mVideoEnabledToggle == null) {
@@ -645,7 +640,6 @@
     @RequiresPermission(Manifest.permission.RECORD_AUDIO)
     @VisibleForTesting
     @MainThread
-    @OptIn(markerClass = ExperimentalVideo.class)
     void startRecording(Consumer<VideoRecordEvent> listener) {
         MediaStoreOutputOptions outputOptions = getNewVideoOutputMediaStoreOptions();
         AudioConfig audioConfig = AudioConfig.create(true);
@@ -655,7 +649,6 @@
 
     @VisibleForTesting
     @MainThread
-    @OptIn(markerClass = ExperimentalVideo.class)
     void stopRecording() {
         if (mActiveRecording != null) {
             mActiveRecording.stop();
diff --git a/compose/animation/animation-core/api/current.ignore b/compose/animation/animation-core/api/current.ignore
index b54a96a..56e536b 100644
--- a/compose/animation/animation-core/api/current.ignore
+++ b/compose/animation/animation-core/api/current.ignore
@@ -1,4 +1,28 @@
 // Baseline format: 1.0
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateDpAsState(float, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateDpAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.unit.Dp> to androidx.compose.runtime.State<androidx.compose.ui.unit.Dp>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateFloatAsState(float, androidx.compose.animation.core.AnimationSpec<java.lang.Float>, float, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateFloatAsState has changed return type from androidx.compose.runtime.State<? extends java.lang.Float> to androidx.compose.runtime.State<java.lang.Float>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateIntAsState(int, androidx.compose.animation.core.AnimationSpec<java.lang.Integer>, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateIntAsState has changed return type from androidx.compose.runtime.State<? extends java.lang.Integer> to androidx.compose.runtime.State<java.lang.Integer>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateIntOffsetAsState(long, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateIntOffsetAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntOffset> to androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateIntSizeAsState(long, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateIntSizeAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntSize> to androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateOffsetAsState(long, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateOffsetAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Offset> to androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateRectAsState(androidx.compose.ui.geometry.Rect, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateRectAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Rect> to androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateSizeAsState(long, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateSizeAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Size> to androidx.compose.runtime.State<androidx.compose.ui.geometry.Size>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateValueAsState(T, androidx.compose.animation.core.TwoWayConverter<T,V>, androidx.compose.animation.core.AnimationSpec<T>, T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateValueAsState has changed return type from androidx.compose.runtime.State<? extends T> to androidx.compose.runtime.State<T>
+ChangedType: androidx.compose.animation.core.InfiniteTransitionKt#animateFloat(androidx.compose.animation.core.InfiniteTransition, float, float, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float>):
+    Method androidx.compose.animation.core.InfiniteTransitionKt.animateFloat has changed return type from androidx.compose.runtime.State<? extends java.lang.Float> to androidx.compose.runtime.State<java.lang.Float>
+ChangedType: androidx.compose.animation.core.InfiniteTransitionKt#animateValue(androidx.compose.animation.core.InfiniteTransition, T, T, androidx.compose.animation.core.TwoWayConverter<T,V>, androidx.compose.animation.core.InfiniteRepeatableSpec<T>):
+    Method androidx.compose.animation.core.InfiniteTransitionKt.animateValue has changed return type from androidx.compose.runtime.State<? extends T> to androidx.compose.runtime.State<T>
+
+
 InvalidNullConversion: androidx.compose.animation.core.Animatable#Animatable(T, androidx.compose.animation.core.TwoWayConverter<T,V>, T) parameter #0:
     Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter initialValue in androidx.compose.animation.core.Animatable(T initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T visibilityThreshold)
 InvalidNullConversion: androidx.compose.animation.core.Animatable#Animatable(T, androidx.compose.animation.core.TwoWayConverter<T,V>, T, String) parameter #0:
@@ -13,8 +37,8 @@
     Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetValue in androidx.compose.animation.core.Animatable.snapTo(T targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit> arg2)
 InvalidNullConversion: androidx.compose.animation.core.AnimateAsStateKt#animateValueAsState(T, androidx.compose.animation.core.TwoWayConverter<T,V>, androidx.compose.animation.core.AnimationSpec<T>, T, String, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>) parameter #0:
     Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetValue in androidx.compose.animation.core.AnimateAsStateKt.animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.AnimationSpec<T> animationSpec, T visibilityThreshold, String label, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> finishedListener)
-InvalidNullConversion: androidx.compose.animation.core.AnimateAsStateKt#animateValueAsState(T, androidx.compose.animation.core.TwoWayConverter<T,V>, androidx.compose.animation.core.AnimationSpec<T>, T, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit>) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetValue in androidx.compose.animation.core.AnimateAsStateKt.animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.AnimationSpec<T> animationSpec, T visibilityThreshold, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> finishedListener)
+InvalidNullConversion: androidx.compose.animation.core.AnimateAsStateKt#animateValueAsState(T, androidx.compose.animation.core.TwoWayConverter<T,V>, androidx.compose.animation.core.AnimationSpec<T>, T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>) parameter #0:
+    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetValue in androidx.compose.animation.core.AnimateAsStateKt.animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.AnimationSpec<T> animationSpec, T visibilityThreshold, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> finishedListener)
 InvalidNullConversion: androidx.compose.animation.core.AnimationKt#TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V>, T, T, T) parameter #2:
     Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter initialValue in androidx.compose.animation.core.AnimationKt.TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T targetValue, T initialVelocity)
 InvalidNullConversion: androidx.compose.animation.core.AnimationKt#TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V>, T, T, T) parameter #3:
diff --git a/compose/animation/animation-core/api/current.txt b/compose/animation/animation-core/api/current.txt
index 3f41c59..1bb4425 100644
--- a/compose/animation/animation-core/api/current.txt
+++ b/compose/animation/animation-core/api/current.txt
@@ -36,23 +36,23 @@
 
   public final class AnimateAsStateKt {
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional String label, optional kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional kotlin.jvm.functions.Function1<? super java.lang.Float,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional String label, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? finishedListener);
   }
 
   @kotlin.jvm.JvmDefaultWithCompatibility public interface Animation<T, V extends androidx.compose.animation.core.AnimationVector> {
@@ -124,10 +124,10 @@
   }
 
   public final class AnimationSpecKt {
-    method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T>! infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+    method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.KeyframesSpec<T> keyframes(kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T>,kotlin.Unit> init);
-    method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T>! repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+    method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SnapSpec<T> snap(optional int delayMillis);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SpringSpec<T> spring(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
@@ -424,9 +424,9 @@
   }
 
   public final class InfiniteTransitionKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec, optional String label);
-    method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec);
     method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec, optional String label);
     method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition();
     method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition(optional String label);
diff --git a/compose/animation/animation-core/api/public_plus_experimental_current.txt b/compose/animation/animation-core/api/public_plus_experimental_current.txt
index dae4fd4..595b3e9 100644
--- a/compose/animation/animation-core/api/public_plus_experimental_current.txt
+++ b/compose/animation/animation-core/api/public_plus_experimental_current.txt
@@ -36,23 +36,23 @@
 
   public final class AnimateAsStateKt {
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional String label, optional kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional kotlin.jvm.functions.Function1<? super java.lang.Float,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional String label, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? finishedListener);
   }
 
   @kotlin.jvm.JvmDefaultWithCompatibility public interface Animation<T, V extends androidx.compose.animation.core.AnimationVector> {
@@ -124,10 +124,10 @@
   }
 
   public final class AnimationSpecKt {
-    method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T>! infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+    method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.KeyframesSpec<T> keyframes(kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T>,kotlin.Unit> init);
-    method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T>! repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+    method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SnapSpec<T> snap(optional int delayMillis);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SpringSpec<T> spring(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
@@ -427,9 +427,9 @@
   }
 
   public final class InfiniteTransitionKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec, optional String label);
-    method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec);
     method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec, optional String label);
     method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition();
     method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition(optional String label);
diff --git a/compose/animation/animation-core/api/restricted_current.ignore b/compose/animation/animation-core/api/restricted_current.ignore
index 5e16b5b..c401c01 100644
--- a/compose/animation/animation-core/api/restricted_current.ignore
+++ b/compose/animation/animation-core/api/restricted_current.ignore
@@ -1,4 +1,28 @@
 // Baseline format: 1.0
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateDpAsState(float, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateDpAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.unit.Dp> to androidx.compose.runtime.State<androidx.compose.ui.unit.Dp>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateFloatAsState(float, androidx.compose.animation.core.AnimationSpec<java.lang.Float>, float, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateFloatAsState has changed return type from androidx.compose.runtime.State<? extends java.lang.Float> to androidx.compose.runtime.State<java.lang.Float>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateIntAsState(int, androidx.compose.animation.core.AnimationSpec<java.lang.Integer>, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateIntAsState has changed return type from androidx.compose.runtime.State<? extends java.lang.Integer> to androidx.compose.runtime.State<java.lang.Integer>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateIntOffsetAsState(long, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateIntOffsetAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntOffset> to androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateIntSizeAsState(long, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateIntSizeAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntSize> to androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateOffsetAsState(long, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateOffsetAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Offset> to androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateRectAsState(androidx.compose.ui.geometry.Rect, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateRectAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Rect> to androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateSizeAsState(long, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateSizeAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Size> to androidx.compose.runtime.State<androidx.compose.ui.geometry.Size>
+ChangedType: androidx.compose.animation.core.AnimateAsStateKt#animateValueAsState(T, androidx.compose.animation.core.TwoWayConverter<T,V>, androidx.compose.animation.core.AnimationSpec<T>, T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>):
+    Method androidx.compose.animation.core.AnimateAsStateKt.animateValueAsState has changed return type from androidx.compose.runtime.State<? extends T> to androidx.compose.runtime.State<T>
+ChangedType: androidx.compose.animation.core.InfiniteTransitionKt#animateFloat(androidx.compose.animation.core.InfiniteTransition, float, float, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float>):
+    Method androidx.compose.animation.core.InfiniteTransitionKt.animateFloat has changed return type from androidx.compose.runtime.State<? extends java.lang.Float> to androidx.compose.runtime.State<java.lang.Float>
+ChangedType: androidx.compose.animation.core.InfiniteTransitionKt#animateValue(androidx.compose.animation.core.InfiniteTransition, T, T, androidx.compose.animation.core.TwoWayConverter<T,V>, androidx.compose.animation.core.InfiniteRepeatableSpec<T>):
+    Method androidx.compose.animation.core.InfiniteTransitionKt.animateValue has changed return type from androidx.compose.runtime.State<? extends T> to androidx.compose.runtime.State<T>
+
+
 InvalidNullConversion: androidx.compose.animation.core.Animatable#Animatable(T, androidx.compose.animation.core.TwoWayConverter<T,V>, T) parameter #0:
     Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter initialValue in androidx.compose.animation.core.Animatable(T initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T visibilityThreshold)
 InvalidNullConversion: androidx.compose.animation.core.Animatable#Animatable(T, androidx.compose.animation.core.TwoWayConverter<T,V>, T, String) parameter #0:
@@ -13,8 +37,8 @@
     Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetValue in androidx.compose.animation.core.Animatable.snapTo(T targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit> arg2)
 InvalidNullConversion: androidx.compose.animation.core.AnimateAsStateKt#animateValueAsState(T, androidx.compose.animation.core.TwoWayConverter<T,V>, androidx.compose.animation.core.AnimationSpec<T>, T, String, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>) parameter #0:
     Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetValue in androidx.compose.animation.core.AnimateAsStateKt.animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.AnimationSpec<T> animationSpec, T visibilityThreshold, String label, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> finishedListener)
-InvalidNullConversion: androidx.compose.animation.core.AnimateAsStateKt#animateValueAsState(T, androidx.compose.animation.core.TwoWayConverter<T,V>, androidx.compose.animation.core.AnimationSpec<T>, T, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit>) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetValue in androidx.compose.animation.core.AnimateAsStateKt.animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.AnimationSpec<T> animationSpec, T visibilityThreshold, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> finishedListener)
+InvalidNullConversion: androidx.compose.animation.core.AnimateAsStateKt#animateValueAsState(T, androidx.compose.animation.core.TwoWayConverter<T,V>, androidx.compose.animation.core.AnimationSpec<T>, T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>) parameter #0:
+    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetValue in androidx.compose.animation.core.AnimateAsStateKt.animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.AnimationSpec<T> animationSpec, T visibilityThreshold, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> finishedListener)
 InvalidNullConversion: androidx.compose.animation.core.AnimationKt#TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V>, T, T, T) parameter #2:
     Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter initialValue in androidx.compose.animation.core.AnimationKt.TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T targetValue, T initialVelocity)
 InvalidNullConversion: androidx.compose.animation.core.AnimationKt#TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V>, T, T, T) parameter #3:
diff --git a/compose/animation/animation-core/api/restricted_current.txt b/compose/animation/animation-core/api/restricted_current.txt
index cab01bb..0d3bd05 100644
--- a/compose/animation/animation-core/api/restricted_current.txt
+++ b/compose/animation/animation-core/api/restricted_current.txt
@@ -36,23 +36,23 @@
 
   public final class AnimateAsStateKt {
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional String label, optional kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional kotlin.jvm.functions.Function1<? super java.lang.Float,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? finishedListener);
     method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional String label, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValueAsState(T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? finishedListener);
   }
 
   @kotlin.jvm.JvmDefaultWithCompatibility public interface Animation<T, V extends androidx.compose.animation.core.AnimationVector> {
@@ -124,10 +124,10 @@
   }
 
   public final class AnimationSpecKt {
-    method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T>! infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+    method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.KeyframesSpec<T> keyframes(kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T>,kotlin.Unit> init);
-    method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T>! repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+    method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SnapSpec<T> snap(optional int delayMillis);
     method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SpringSpec<T> spring(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
@@ -424,9 +424,9 @@
   }
 
   public final class InfiniteTransitionKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec, optional String label);
-    method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec);
     method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec, optional String label);
     method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition();
     method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition(optional String label);
diff --git a/compose/animation/animation/api/current.ignore b/compose/animation/animation/api/current.ignore
index 029cfad..2990ab6 100644
--- a/compose/animation/animation/api/current.ignore
+++ b/compose/animation/animation/api/current.ignore
@@ -1,8 +1,14 @@
 // Baseline format: 1.0
+ChangedType: androidx.compose.animation.SingleValueAnimationKt#animateColorAsState(long, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>):
+    Method androidx.compose.animation.SingleValueAnimationKt.animateColorAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> to androidx.compose.runtime.State<androidx.compose.ui.graphics.Color>
+ChangedType: androidx.compose.animation.TransitionKt#animateColor(androidx.compose.animation.core.InfiniteTransition, long, long, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color>):
+    Method androidx.compose.animation.TransitionKt.animateColor has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> to androidx.compose.runtime.State<androidx.compose.ui.graphics.Color>
+
+
 InvalidNullConversion: androidx.compose.animation.CrossfadeKt#Crossfade(T, androidx.compose.ui.Modifier, androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float>, String, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>) parameter #0:
     Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetState in androidx.compose.animation.CrossfadeKt.Crossfade(T targetState, androidx.compose.ui.Modifier modifier, androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, String label, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content)
-InvalidNullConversion: androidx.compose.animation.CrossfadeKt#Crossfade(T, androidx.compose.ui.Modifier, androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float>, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit>) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetState in androidx.compose.animation.CrossfadeKt.Crossfade(T targetState, androidx.compose.ui.Modifier modifier, androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> content)
+InvalidNullConversion: androidx.compose.animation.CrossfadeKt#Crossfade(T, androidx.compose.ui.Modifier, androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>) parameter #0:
+    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetState in androidx.compose.animation.CrossfadeKt.Crossfade(T targetState, androidx.compose.ui.Modifier modifier, androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content)
 
 
 RemovedDeprecatedMethod: androidx.compose.animation.SplineBasedFloatDecayAnimationSpec_androidKt#splineBasedDecayDeprecated(androidx.compose.ui.unit.Density):
diff --git a/compose/animation/animation/api/current.txt b/compose/animation/animation/api/current.txt
index f57cb90..f8122ac 100644
--- a/compose/animation/animation/api/current.txt
+++ b/compose/animation/animation/api/current.txt
@@ -75,7 +75,7 @@
 
   public final class CrossfadeKt {
     method @androidx.compose.runtime.Composable public static <T> void Crossfade(T targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional String label, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static <T> void Crossfade(T targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void Crossfade(T targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
   }
 
   public final class EnterExitTransitionKt {
@@ -120,7 +120,7 @@
   public final class SingleValueAnimationKt {
     method public static androidx.compose.animation.core.Animatable<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> Animatable(long initialValue);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? finishedListener);
   }
 
   public interface SizeTransform {
@@ -149,7 +149,7 @@
   }
 
   public final class TransitionKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.graphics.Color>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.graphics.Color> targetValueByState);
   }
diff --git a/compose/animation/animation/api/public_plus_experimental_current.txt b/compose/animation/animation/api/public_plus_experimental_current.txt
index 5f498f4..21baa95 100644
--- a/compose/animation/animation/api/public_plus_experimental_current.txt
+++ b/compose/animation/animation/api/public_plus_experimental_current.txt
@@ -82,7 +82,7 @@
   public final class CrossfadeKt {
     method @androidx.compose.animation.ExperimentalAnimationApi @androidx.compose.runtime.Composable public static <T> void Crossfade(androidx.compose.animation.core.Transition<T>, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,?> contentKey, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static <T> void Crossfade(T targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional String label, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static <T> void Crossfade(T targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void Crossfade(T targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
   }
 
   @androidx.compose.animation.ExperimentalAnimationApi public enum EnterExitState {
@@ -138,7 +138,7 @@
   public final class SingleValueAnimationKt {
     method public static androidx.compose.animation.core.Animatable<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> Animatable(long initialValue);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? finishedListener);
   }
 
   public interface SizeTransform {
@@ -167,7 +167,7 @@
   }
 
   public final class TransitionKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.graphics.Color>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.graphics.Color> targetValueByState);
   }
diff --git a/compose/animation/animation/api/restricted_current.ignore b/compose/animation/animation/api/restricted_current.ignore
index 029cfad..2990ab6 100644
--- a/compose/animation/animation/api/restricted_current.ignore
+++ b/compose/animation/animation/api/restricted_current.ignore
@@ -1,8 +1,14 @@
 // Baseline format: 1.0
+ChangedType: androidx.compose.animation.SingleValueAnimationKt#animateColorAsState(long, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color>, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>):
+    Method androidx.compose.animation.SingleValueAnimationKt.animateColorAsState has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> to androidx.compose.runtime.State<androidx.compose.ui.graphics.Color>
+ChangedType: androidx.compose.animation.TransitionKt#animateColor(androidx.compose.animation.core.InfiniteTransition, long, long, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color>):
+    Method androidx.compose.animation.TransitionKt.animateColor has changed return type from androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> to androidx.compose.runtime.State<androidx.compose.ui.graphics.Color>
+
+
 InvalidNullConversion: androidx.compose.animation.CrossfadeKt#Crossfade(T, androidx.compose.ui.Modifier, androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float>, String, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>) parameter #0:
     Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetState in androidx.compose.animation.CrossfadeKt.Crossfade(T targetState, androidx.compose.ui.Modifier modifier, androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, String label, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content)
-InvalidNullConversion: androidx.compose.animation.CrossfadeKt#Crossfade(T, androidx.compose.ui.Modifier, androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float>, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit>) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetState in androidx.compose.animation.CrossfadeKt.Crossfade(T targetState, androidx.compose.ui.Modifier modifier, androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> content)
+InvalidNullConversion: androidx.compose.animation.CrossfadeKt#Crossfade(T, androidx.compose.ui.Modifier, androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>) parameter #0:
+    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter targetState in androidx.compose.animation.CrossfadeKt.Crossfade(T targetState, androidx.compose.ui.Modifier modifier, androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content)
 
 
 RemovedDeprecatedMethod: androidx.compose.animation.SplineBasedFloatDecayAnimationSpec_androidKt#splineBasedDecayDeprecated(androidx.compose.ui.unit.Density):
diff --git a/compose/animation/animation/api/restricted_current.txt b/compose/animation/animation/api/restricted_current.txt
index f57cb90..f8122ac 100644
--- a/compose/animation/animation/api/restricted_current.txt
+++ b/compose/animation/animation/api/restricted_current.txt
@@ -75,7 +75,7 @@
 
   public final class CrossfadeKt {
     method @androidx.compose.runtime.Composable public static <T> void Crossfade(T targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional String label, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static <T> void Crossfade(T targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void Crossfade(T targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
   }
 
   public final class EnterExitTransitionKt {
@@ -120,7 +120,7 @@
   public final class SingleValueAnimationKt {
     method public static androidx.compose.animation.core.Animatable<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> Animatable(long initialValue);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? finishedListener);
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,? extends kotlin.Unit>? finishedListener);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? finishedListener);
   }
 
   public interface SizeTransform {
@@ -149,7 +149,7 @@
   }
 
   public final class TransitionKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec);
     method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.graphics.Color>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.graphics.Color> targetValueByState);
   }
diff --git a/compose/foundation/foundation/api/current.txt b/compose/foundation/foundation/api/current.txt
index f0329e3..8be51e4 100644
--- a/compose/foundation/foundation/api/current.txt
+++ b/compose/foundation/foundation/api/current.txt
@@ -383,17 +383,17 @@
 
   public final class LazyDslKt {
     method @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
     method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
-    method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+    method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
     method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
-    method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+    method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
     method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
-    method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+    method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
     method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
-    method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+    method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
   }
 
   @androidx.compose.foundation.lazy.LazyScopeMarker @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyItemScope {
@@ -440,9 +440,9 @@
 
   @androidx.compose.foundation.lazy.LazyScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyListScope {
     method public default void item(optional Object? key, optional Object? contentType, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
-    method @Deprecated public void item(optional Object? key, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,? extends kotlin.Unit> content);
+    method @Deprecated public void item(optional Object? key, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
     method public default void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
-    method @Deprecated public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? extends kotlin.Unit> itemContent);
+    method @Deprecated public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
   }
 
   @androidx.compose.runtime.Stable public final class LazyListState implements androidx.compose.foundation.gestures.ScrollableState {
@@ -859,18 +859,18 @@
 package androidx.compose.foundation.text {
 
   public final class BasicTextFieldKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
     method @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
     method @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
   }
 
   public final class BasicTextKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent);
     method @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional androidx.compose.ui.graphics.ColorProducer? color);
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines);
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines);
     method @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional androidx.compose.ui.graphics.ColorProducer? color);
   }
 
diff --git a/compose/foundation/foundation/api/public_plus_experimental_current.txt b/compose/foundation/foundation/api/public_plus_experimental_current.txt
index d2266f4..15fd553 100644
--- a/compose/foundation/foundation/api/public_plus_experimental_current.txt
+++ b/compose/foundation/foundation/api/public_plus_experimental_current.txt
@@ -516,17 +516,17 @@
 
   public final class LazyDslKt {
     method @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
     method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
-    method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+    method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
     method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
-    method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+    method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
     method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
-    method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+    method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
     method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
-    method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+    method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
   }
 
   @androidx.compose.foundation.lazy.LazyScopeMarker @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyItemScope {
@@ -574,9 +574,9 @@
 
   @androidx.compose.foundation.lazy.LazyScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyListScope {
     method public default void item(optional Object? key, optional Object? contentType, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
-    method @Deprecated public void item(optional Object? key, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,? extends kotlin.Unit> content);
+    method @Deprecated public void item(optional Object? key, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
     method public default void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
-    method @Deprecated public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? extends kotlin.Unit> itemContent);
+    method @Deprecated public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
     method @androidx.compose.foundation.ExperimentalFoundationApi public void stickyHeader(optional Object? key, optional Object? contentType, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
   }
 
@@ -1204,18 +1204,18 @@
 package androidx.compose.foundation.text {
 
   public final class BasicTextFieldKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
     method @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
     method @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
   }
 
   public final class BasicTextKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent);
     method @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional androidx.compose.ui.graphics.ColorProducer? color);
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines);
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines);
     method @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional androidx.compose.ui.graphics.ColorProducer? color);
   }
 
diff --git a/compose/foundation/foundation/api/restricted_current.txt b/compose/foundation/foundation/api/restricted_current.txt
index f0329e3..8be51e4 100644
--- a/compose/foundation/foundation/api/restricted_current.txt
+++ b/compose/foundation/foundation/api/restricted_current.txt
@@ -383,17 +383,17 @@
 
   public final class LazyDslKt {
     method @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
     method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
-    method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+    method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
     method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
-    method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+    method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
     method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
-    method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+    method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
     method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
-    method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+    method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
   }
 
   @androidx.compose.foundation.lazy.LazyScopeMarker @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyItemScope {
@@ -440,9 +440,9 @@
 
   @androidx.compose.foundation.lazy.LazyScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyListScope {
     method public default void item(optional Object? key, optional Object? contentType, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
-    method @Deprecated public void item(optional Object? key, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,? extends kotlin.Unit> content);
+    method @Deprecated public void item(optional Object? key, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
     method public default void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
-    method @Deprecated public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? extends kotlin.Unit> itemContent);
+    method @Deprecated public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
   }
 
   @androidx.compose.runtime.Stable public final class LazyListState implements androidx.compose.foundation.gestures.ScrollableState {
@@ -859,18 +859,18 @@
 package androidx.compose.foundation.text {
 
   public final class BasicTextFieldKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
     method @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
     method @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
   }
 
   public final class BasicTextKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent);
     method @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional androidx.compose.ui.graphics.ColorProducer? color);
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines);
-    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines);
+    method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines);
     method @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional androidx.compose.ui.graphics.ColorProducer? color);
   }
 
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
index 7ae5f78a..4f41bb7 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
@@ -65,10 +65,12 @@
 import androidx.compose.ui.input.nestedscroll.NestedScrollDispatcher
 import androidx.compose.ui.input.nestedscroll.NestedScrollSource
 import androidx.compose.ui.input.nestedscroll.nestedScroll
+import androidx.compose.ui.input.pointer.PointerInputChange
 import androidx.compose.ui.input.pointer.PointerInputScope
 import androidx.compose.ui.input.pointer.changedToUpIgnoreConsumed
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.input.pointer.util.VelocityTracker
+import androidx.compose.ui.input.pointer.util.VelocityTrackerAddPointsFix
 import androidx.compose.ui.materialize
 import androidx.compose.ui.modifier.ModifierLocalConsumer
 import androidx.compose.ui.modifier.ModifierLocalReadScope
@@ -2588,6 +2590,53 @@
     tracker: VelocityTracker,
     pointerInputScope: PointerInputScope
 ) {
+    if (VelocityTrackerAddPointsFix) {
+        savePointerInputEventsWithFix(tracker, pointerInputScope)
+    } else {
+        savePointerInputEventsLegacy(tracker, pointerInputScope)
+    }
+}
+
+@OptIn(ExperimentalComposeUiApi::class)
+internal suspend fun savePointerInputEventsWithFix(
+    tracker: VelocityTracker,
+    pointerInputScope: PointerInputScope
+) {
+    with(pointerInputScope) {
+        coroutineScope {
+            awaitPointerEventScope {
+                while (true) {
+                    var event: PointerInputChange? = awaitFirstDown()
+                    while (event != null && !event.changedToUpIgnoreConsumed()) {
+                        val currentEvent = awaitPointerEvent().changes
+                            .firstOrNull()
+
+                        if (currentEvent != null && !currentEvent.changedToUpIgnoreConsumed()) {
+                            if (currentEvent.historical.isEmpty()) {
+                                tracker.addPosition(
+                                    currentEvent.uptimeMillis,
+                                    currentEvent.position
+                                )
+                            } else {
+                                currentEvent.historical.fastForEach {
+                                    tracker.addPosition(it.uptimeMillis, it.position)
+                                }
+                            }
+                        }
+
+                        event = currentEvent
+                    }
+                }
+            }
+        }
+    }
+}
+
+@OptIn(ExperimentalComposeUiApi::class)
+internal suspend fun savePointerInputEventsLegacy(
+    tracker: VelocityTracker,
+    pointerInputScope: PointerInputScope
+) {
     with(pointerInputScope) {
         coroutineScope {
             awaitPointerEventScope {
diff --git a/compose/material/material/api/current.txt b/compose/material/material/api/current.txt
index 0660033..8935416 100644
--- a/compose/material/material/api/current.txt
+++ b/compose/material/material/api/current.txt
@@ -7,8 +7,8 @@
   }
 
   public final class AndroidMenu_androidKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
@@ -338,9 +338,9 @@
   }
 
   public final class OutlinedTextFieldKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+    method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
-    method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+    method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
   }
 
@@ -578,18 +578,18 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+    method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
-    method @Deprecated @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+    method @Deprecated @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
   }
 
   public final class TextKt {
     method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
     property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
   }
diff --git a/compose/material/material/api/public_plus_experimental_current.txt b/compose/material/material/api/public_plus_experimental_current.txt
index 4bed1769..3ce6f1ce 100644
--- a/compose/material/material/api/public_plus_experimental_current.txt
+++ b/compose/material/material/api/public_plus_experimental_current.txt
@@ -7,8 +7,8 @@
   }
 
   public final class AndroidMenu_androidKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
@@ -580,9 +580,9 @@
   }
 
   public final class OutlinedTextFieldKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+    method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
-    method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+    method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
   }
 
@@ -890,18 +890,18 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+    method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
-    method @Deprecated @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+    method @Deprecated @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
   }
 
   public final class TextKt {
     method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
     property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
   }
diff --git a/compose/material/material/api/restricted_current.txt b/compose/material/material/api/restricted_current.txt
index 0660033..8935416 100644
--- a/compose/material/material/api/restricted_current.txt
+++ b/compose/material/material/api/restricted_current.txt
@@ -7,8 +7,8 @@
   }
 
   public final class AndroidMenu_androidKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
@@ -338,9 +338,9 @@
   }
 
   public final class OutlinedTextFieldKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+    method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
-    method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+    method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
   }
 
@@ -578,18 +578,18 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+    method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
-    method @Deprecated @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+    method @Deprecated @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
   }
 
   public final class TextKt {
     method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
     property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
   }
diff --git a/compose/material3/material3/api/current.txt b/compose/material3/material3/api/current.txt
index f18e335..4754af1 100644
--- a/compose/material3/material3/api/current.txt
+++ b/compose/material3/material3/api/current.txt
@@ -22,8 +22,8 @@
   }
 
   public final class AndroidMenu_androidKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean enabled, optional androidx.compose.material3.MenuItemColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
   }
 
@@ -824,9 +824,9 @@
   public final class TextKt {
     method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
     property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
   }
diff --git a/compose/material3/material3/api/public_plus_experimental_current.txt b/compose/material3/material3/api/public_plus_experimental_current.txt
index 6a94b94..422f0ec 100644
--- a/compose/material3/material3/api/public_plus_experimental_current.txt
+++ b/compose/material3/material3/api/public_plus_experimental_current.txt
@@ -23,8 +23,8 @@
   }
 
   public final class AndroidMenu_androidKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean enabled, optional androidx.compose.material3.MenuItemColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
   }
 
@@ -795,9 +795,9 @@
   }
 
   public final class OutlinedTextFieldKt {
-    method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
+    method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
-    method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
+    method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
   }
 
@@ -893,7 +893,7 @@
     method public float getInputFieldHeight();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getInputFieldShape();
     method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.WindowInsets getWindowInsets();
-    method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors! inputFieldColors(optional long textColor, optional long disabledTextColor, optional long cursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long placeholderColor, optional long disabledPlaceholderColor);
+    method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors inputFieldColors(optional long textColor, optional long disabledTextColor, optional long cursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long placeholderColor, optional long disabledPlaceholderColor);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors inputFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long cursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor);
     property public final float Elevation;
     property public final float InputFieldHeight;
@@ -1182,9 +1182,9 @@
     method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void DecorationBox(String value, kotlin.jvm.functions.Function0<kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit> container);
     method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void FilledContainerBox(boolean enabled, boolean isError, androidx.compose.foundation.interaction.InteractionSource interactionSource, androidx.compose.material3.TextFieldColors colors, optional androidx.compose.ui.graphics.Shape shape);
     method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void OutlinedBorderContainerBox(boolean enabled, boolean isError, androidx.compose.foundation.interaction.InteractionSource interactionSource, androidx.compose.material3.TextFieldColors colors, optional androidx.compose.ui.graphics.Shape shape, optional float focusedBorderThickness, optional float unfocusedBorderThickness);
-    method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void OutlinedTextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<? extends kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> container);
+    method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void OutlinedTextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit> container);
     method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void OutlinedTextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit> container);
-    method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void TextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<? extends kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> container);
+    method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void TextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit> container);
     method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void TextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit> container);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors colors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long focusedContainerColor, optional long unfocusedContainerColor, optional long disabledContainerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedSupportingTextColor, optional long unfocusedSupportingTextColor, optional long disabledSupportingTextColor, optional long errorSupportingTextColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
     method public androidx.compose.foundation.layout.PaddingValues contentPaddingWithLabel(optional float start, optional float end, optional float top, optional float bottom);
@@ -1219,18 +1219,18 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
+    method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
-    method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
+    method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
     method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
   }
 
   public final class TextKt {
     method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
     property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
   }
diff --git a/compose/material3/material3/api/restricted_current.txt b/compose/material3/material3/api/restricted_current.txt
index f18e335..4754af1 100644
--- a/compose/material3/material3/api/restricted_current.txt
+++ b/compose/material3/material3/api/restricted_current.txt
@@ -22,8 +22,8 @@
   }
 
   public final class AndroidMenu_androidKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean enabled, optional androidx.compose.material3.MenuItemColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
   }
 
@@ -824,9 +824,9 @@
   public final class TextKt {
     method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
     property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
   }
diff --git a/compose/runtime/runtime-tracing/src/main/java/androidx/compose/runtime/tracing/TracingInitializer.kt b/compose/runtime/runtime-tracing/src/main/java/androidx/compose/runtime/tracing/TracingInitializer.kt
index 3721077..855c91e 100644
--- a/compose/runtime/runtime-tracing/src/main/java/androidx/compose/runtime/tracing/TracingInitializer.kt
+++ b/compose/runtime/runtime-tracing/src/main/java/androidx/compose/runtime/tracing/TracingInitializer.kt
@@ -13,22 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/*
- * Copyright 2022 The Android Open Source Project
- *
- * 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 androidx.compose.runtime.tracing
 
 import android.content.Context
diff --git a/compose/runtime/runtime/api/current.txt b/compose/runtime/runtime/api/current.txt
index e0839e9..ac9ddb4 100644
--- a/compose/runtime/runtime/api/current.txt
+++ b/compose/runtime/runtime/api/current.txt
@@ -63,12 +63,12 @@
   }
 
   public final class ComposablesKt {
-    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
-    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,? extends kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
-    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,? extends kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static inline void ReusableContent(Object? key, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline void ReusableContentHost(boolean active, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.runtime.Composer getCurrentComposer();
@@ -630,9 +630,9 @@
   }
 
   public final class MutableVectorKt {
-    method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(optional int capacity);
+    method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> MutableVector(optional int capacity);
     method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
-    method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf();
+    method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> mutableVectorOf();
     method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> mutableVectorOf(T?... elements);
   }
 
diff --git a/compose/runtime/runtime/api/public_plus_experimental_current.txt b/compose/runtime/runtime/api/public_plus_experimental_current.txt
index d9c5ce4..095c02f 100644
--- a/compose/runtime/runtime/api/public_plus_experimental_current.txt
+++ b/compose/runtime/runtime/api/public_plus_experimental_current.txt
@@ -68,12 +68,12 @@
   }
 
   public final class ComposablesKt {
-    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
-    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,? extends kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
-    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,? extends kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static inline void ReusableContent(Object? key, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline void ReusableContentHost(boolean active, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.runtime.Composer getCurrentComposer();
@@ -679,9 +679,9 @@
   }
 
   public final class MutableVectorKt {
-    method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(optional int capacity);
+    method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> MutableVector(optional int capacity);
     method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
-    method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf();
+    method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> mutableVectorOf();
     method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> mutableVectorOf(T?... elements);
   }
 
diff --git a/compose/runtime/runtime/api/restricted_current.txt b/compose/runtime/runtime/api/restricted_current.txt
index 96ce97e..fd14be5 100644
--- a/compose/runtime/runtime/api/restricted_current.txt
+++ b/compose/runtime/runtime/api/restricted_current.txt
@@ -67,12 +67,12 @@
   }
 
   public final class ComposablesKt {
-    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
-    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,? extends kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
-    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
-    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,? extends kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static inline void ReusableContent(Object? key, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline void ReusableContentHost(boolean active, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.runtime.Composer getCurrentComposer();
@@ -668,9 +668,9 @@
   }
 
   public final class MutableVectorKt {
-    method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(optional int capacity);
+    method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> MutableVector(optional int capacity);
     method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
-    method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf();
+    method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> mutableVectorOf();
     method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> mutableVectorOf(T?... elements);
   }
 
diff --git a/compose/ui/ui-test-junit4/api/public_plus_experimental_current.txt b/compose/ui/ui-test-junit4/api/public_plus_experimental_current.txt
index 8e48aac..8f10178 100644
--- a/compose/ui/ui-test-junit4/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-test-junit4/api/public_plus_experimental_current.txt
@@ -31,7 +31,7 @@
   }
 
   public final class ComposeUiTestKt {
-    method @androidx.compose.ui.test.ExperimentalTestApi public static void runComposeUiTest(optional kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.ComposeUiTest,? extends kotlin.Unit> block);
+    method @androidx.compose.ui.test.ExperimentalTestApi public static void runComposeUiTest(optional kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.ComposeUiTest,kotlin.Unit> block);
     method @androidx.compose.ui.test.ExperimentalTestApi public static void waitUntilAtLeastOneExists(androidx.compose.ui.test.ComposeUiTest, androidx.compose.ui.test.SemanticsMatcher matcher, optional long timeoutMillis);
     method @androidx.compose.ui.test.ExperimentalTestApi public static void waitUntilDoesNotExist(androidx.compose.ui.test.ComposeUiTest, androidx.compose.ui.test.SemanticsMatcher matcher, optional long timeoutMillis);
     method @androidx.compose.ui.test.ExperimentalTestApi public static void waitUntilExactlyOneExists(androidx.compose.ui.test.ComposeUiTest, androidx.compose.ui.test.SemanticsMatcher matcher, optional long timeoutMillis);
@@ -41,7 +41,7 @@
   public final class ComposeUiTest_androidKt {
     method @androidx.compose.ui.test.ExperimentalTestApi public static inline <A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.AndroidComposeUiTestEnvironment<A> AndroidComposeUiTestEnvironment(optional kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function0<? extends A> activityProvider);
     method @androidx.compose.ui.test.ExperimentalTestApi public static <A extends androidx.activity.ComponentActivity> void runAndroidComposeUiTest(Class<A> activityClass, optional kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.AndroidComposeUiTest<A>,kotlin.Unit> block);
-    method @androidx.compose.ui.test.ExperimentalTestApi public static inline <reified A extends androidx.activity.ComponentActivity> void runAndroidComposeUiTest(optional kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.AndroidComposeUiTest<A>,? extends kotlin.Unit> block);
+    method @androidx.compose.ui.test.ExperimentalTestApi public static inline <reified A extends androidx.activity.ComponentActivity> void runAndroidComposeUiTest(optional kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.AndroidComposeUiTest<A>,kotlin.Unit> block);
     method @androidx.compose.ui.test.ExperimentalTestApi public static void runComposeUiTest(kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.ComposeUiTest,kotlin.Unit> block);
     method @androidx.compose.ui.test.ExperimentalTestApi public static void runEmptyComposeUiTest(kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.ComposeUiTest,kotlin.Unit> block);
   }
diff --git a/compose/ui/ui-test/api/current.ignore b/compose/ui/ui-test/api/current.ignore
index 5af1fc7..3e871ce1 100644
--- a/compose/ui/ui-test/api/current.ignore
+++ b/compose/ui/ui-test/api/current.ignore
@@ -1,7 +1,7 @@
 // Baseline format: 1.0
-ChangedType: androidx.compose.ui.test.ActionsKt#performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>>, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit>):
+ChangedType: androidx.compose.ui.test.ActionsKt#performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>):
     Method androidx.compose.ui.test.ActionsKt.performSemanticsAction has changed return type from androidx.compose.ui.test.SemanticsNodeInteraction to void
-ChangedType: androidx.compose.ui.test.ActionsKt#performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>>):
+ChangedType: androidx.compose.ui.test.ActionsKt#performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>>):
     Method androidx.compose.ui.test.ActionsKt.performSemanticsAction has changed return type from androidx.compose.ui.test.SemanticsNodeInteraction to void
 
 
diff --git a/compose/ui/ui-test/api/current.txt b/compose/ui/ui-test/api/current.txt
index 8f1eda1..05d9e4e 100644
--- a/compose/ui/ui-test/api/current.txt
+++ b/compose/ui/ui-test/api/current.txt
@@ -9,10 +9,10 @@
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToIndex(androidx.compose.ui.test.SemanticsNodeInteraction, int index);
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToKey(androidx.compose.ui.test.SemanticsNodeInteraction, Object key);
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToNode(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.test.SemanticsMatcher matcher);
-    method @Deprecated public static void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>> key);
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> key);
-    method @Deprecated public static <T extends kotlin.Function<? extends java.lang.Boolean>> void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> invocation);
+    method @Deprecated public static void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> key);
     method public static <T extends kotlin.Function<? extends java.lang.Boolean>> androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
+    method @Deprecated public static <T extends kotlin.Function<? extends java.lang.Boolean>> void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performTouchInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.TouchInjectionScope,kotlin.Unit> block);
   }
 
diff --git a/compose/ui/ui-test/api/public_plus_experimental_current.txt b/compose/ui/ui-test/api/public_plus_experimental_current.txt
index 4e9b8d2..1060ce5 100644
--- a/compose/ui/ui-test/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-test/api/public_plus_experimental_current.txt
@@ -12,10 +12,10 @@
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToIndex(androidx.compose.ui.test.SemanticsNodeInteraction, int index);
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToKey(androidx.compose.ui.test.SemanticsNodeInteraction, Object key);
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToNode(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.test.SemanticsMatcher matcher);
-    method @Deprecated public static void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>> key);
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> key);
-    method @Deprecated public static <T extends kotlin.Function<? extends java.lang.Boolean>> void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> invocation);
+    method @Deprecated public static void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> key);
     method public static <T extends kotlin.Function<? extends java.lang.Boolean>> androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
+    method @Deprecated public static <T extends kotlin.Function<? extends java.lang.Boolean>> void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performTouchInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.TouchInjectionScope,kotlin.Unit> block);
   }
 
diff --git a/compose/ui/ui-test/api/restricted_current.ignore b/compose/ui/ui-test/api/restricted_current.ignore
index 5af1fc7..3e871ce1 100644
--- a/compose/ui/ui-test/api/restricted_current.ignore
+++ b/compose/ui/ui-test/api/restricted_current.ignore
@@ -1,7 +1,7 @@
 // Baseline format: 1.0
-ChangedType: androidx.compose.ui.test.ActionsKt#performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>>, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit>):
+ChangedType: androidx.compose.ui.test.ActionsKt#performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>):
     Method androidx.compose.ui.test.ActionsKt.performSemanticsAction has changed return type from androidx.compose.ui.test.SemanticsNodeInteraction to void
-ChangedType: androidx.compose.ui.test.ActionsKt#performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>>):
+ChangedType: androidx.compose.ui.test.ActionsKt#performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>>):
     Method androidx.compose.ui.test.ActionsKt.performSemanticsAction has changed return type from androidx.compose.ui.test.SemanticsNodeInteraction to void
 
 
diff --git a/compose/ui/ui-test/api/restricted_current.txt b/compose/ui/ui-test/api/restricted_current.txt
index 020fafb..f338e1a 100644
--- a/compose/ui/ui-test/api/restricted_current.txt
+++ b/compose/ui/ui-test/api/restricted_current.txt
@@ -9,10 +9,10 @@
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToIndex(androidx.compose.ui.test.SemanticsNodeInteraction, int index);
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToKey(androidx.compose.ui.test.SemanticsNodeInteraction, Object key);
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToNode(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.test.SemanticsMatcher matcher);
-    method @Deprecated public static void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>> key);
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> key);
-    method @Deprecated public static <T extends kotlin.Function<? extends java.lang.Boolean>> void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> invocation);
+    method @Deprecated public static void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> key);
     method public static <T extends kotlin.Function<? extends java.lang.Boolean>> androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
+    method @Deprecated public static <T extends kotlin.Function<? extends java.lang.Boolean>> void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
     method public static androidx.compose.ui.test.SemanticsNodeInteraction performTouchInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.TouchInjectionScope,kotlin.Unit> block);
   }
 
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveWithHistoryTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveWithHistoryTest.kt
index ca75c82..719b1f7 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveWithHistoryTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveWithHistoryTest.kt
@@ -26,8 +26,10 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.testutils.WithTouchSlop
 import androidx.compose.ui.Alignment
+import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.util.VelocityTrackerAddPointsFix
 import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.test.ExperimentalTestApi
@@ -58,7 +60,10 @@
 
     @Composable
     fun Ui(alignment: Alignment) {
-        Box(Modifier.fillMaxSize().wrapContentSize(alignment)) {
+        Box(
+            Modifier
+                .fillMaxSize()
+                .wrapContentSize(alignment)) {
             ClickableTestBox(modifier = recorder, tag = tag)
         }
     }
@@ -86,6 +91,7 @@
         Truth.assertThat(scrollState.value).isLessThan(101)
     }
 
+    @OptIn(ExperimentalComposeUiApi::class)
     fun flingScrollableImpl(scrollState: ScrollState, useHistoricalEvents: Boolean) {
         val touchSlop = 18f
         rule.setContent {
@@ -118,8 +124,16 @@
             val from = topCenter + Offset(0f, 120f)
             val to = topCenter + Offset(0f, 100f)
 
-            val historicalTimes = listOf(-16L, -8L)
-            val historicalCoordinates = listOf(to + Offset(0f, 70f), to + Offset(0f, 35f))
+            val historicalTimes = if (VelocityTrackerAddPointsFix) {
+                listOf(-16L, -12L, -8L)
+            } else {
+                listOf(-16L, -8L)
+            }
+            val historicalCoordinates = if (VelocityTrackerAddPointsFix) {
+                listOf(to + Offset(0f, 70f), to + Offset(0f, 55f), to + Offset(0f, 35f))
+            } else {
+                listOf(to + Offset(0f, 70f), to + Offset(0f, 35f))
+            }
             val delayMillis = 100L
 
             down(from)
diff --git a/compose/ui/ui/api/current.txt b/compose/ui/ui/api/current.txt
index ace5b6e..614cfda 100644
--- a/compose/ui/ui/api/current.txt
+++ b/compose/ui/ui/api/current.txt
@@ -259,7 +259,7 @@
   }
 
   public final class ShadowKt {
-    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional long ambientColor, optional long spotColor);
   }
 
@@ -457,9 +457,9 @@
   }
 
   public final class GraphicsLayerModifierKt {
-    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
-    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect);
-    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor, optional int compositingStrategy);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> block);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier toolingGraphicsLayer(androidx.compose.ui.Modifier);
diff --git a/compose/ui/ui/api/public_plus_experimental_current.txt b/compose/ui/ui/api/public_plus_experimental_current.txt
index 88c529e6..434d4ce 100644
--- a/compose/ui/ui/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui/api/public_plus_experimental_current.txt
@@ -341,7 +341,7 @@
   }
 
   public final class ShadowKt {
-    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional long ambientColor, optional long spotColor);
   }
 
@@ -576,9 +576,9 @@
   }
 
   public final class GraphicsLayerModifierKt {
-    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
-    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect);
-    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor, optional int compositingStrategy);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> block);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier toolingGraphicsLayer(androidx.compose.ui.Modifier);
@@ -1930,6 +1930,9 @@
 
   public final class VelocityTrackerKt {
     method public static void addPointerInputChange(androidx.compose.ui.input.pointer.util.VelocityTracker, androidx.compose.ui.input.pointer.PointerInputChange event);
+    method @androidx.compose.ui.ExperimentalComposeUiApi public static boolean getVelocityTrackerAddPointsFix();
+    method @androidx.compose.ui.ExperimentalComposeUiApi public static void setVelocityTrackerAddPointsFix(boolean);
+    property @androidx.compose.ui.ExperimentalComposeUiApi public static final boolean VelocityTrackerAddPointsFix;
   }
 
 }
diff --git a/compose/ui/ui/api/restricted_current.txt b/compose/ui/ui/api/restricted_current.txt
index 002ce11..72c9aaa 100644
--- a/compose/ui/ui/api/restricted_current.txt
+++ b/compose/ui/ui/api/restricted_current.txt
@@ -259,7 +259,7 @@
   }
 
   public final class ShadowKt {
-    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional long ambientColor, optional long spotColor);
   }
 
@@ -457,9 +457,9 @@
   }
 
   public final class GraphicsLayerModifierKt {
-    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
-    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect);
-    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor, optional int compositingStrategy);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> block);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier toolingGraphicsLayer(androidx.compose.ui.Modifier);
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
index 5a160ba..617ce21 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
@@ -157,6 +157,7 @@
 import org.mockito.kotlin.spy
 import org.mockito.kotlin.times
 import org.mockito.kotlin.verify
+import org.mockito.kotlin.verifyNoMoreInteractions
 import org.mockito.kotlin.whenever
 
 @MediumTest
@@ -1453,6 +1454,35 @@
 
     @Test
     @SdkSuppress(minSdkVersion = 29)
+    fun testInitContentCaptureSemanticsStructureChangeEvents_onStart() {
+        setUpContentCapture()
+
+        accessibilityDelegate.initContentCaptureSemanticsStructureChangeEvents(true)
+
+        // verify the root node appeared
+        verify(contentCaptureSessionCompat).newVirtualViewStructure(any(), any())
+        verify(contentCaptureSessionCompat).notifyViewsAppeared(any())
+        verify(viewStructureCompat).setDimens(any(), any(), any(), any(), any(), any())
+        verify(viewStructureCompat).toViewStructure()
+        verifyNoMoreInteractions(contentCaptureSessionCompat)
+        verifyNoMoreInteractions(viewStructureCompat)
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = 29)
+    fun testInitContentCaptureSemanticsStructureChangeEvents_onStop() {
+        setUpContentCapture()
+
+        accessibilityDelegate.initContentCaptureSemanticsStructureChangeEvents(false)
+
+        // verify the root node disappeared
+        verify(contentCaptureSessionCompat).notifyViewsDisappeared(any())
+        verifyNoMoreInteractions(contentCaptureSessionCompat)
+        verifyNoMoreInteractions(viewStructureCompat)
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = 29)
     fun testSendContentCaptureSemanticsStructureChangeEvents_appeared() {
         setUpContentCapture()
 
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/nestedscroll/NestedScrollModifierTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/nestedscroll/NestedScrollModifierTest.kt
index 6c15e46..ea7a61b 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/nestedscroll/NestedScrollModifierTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/nestedscroll/NestedScrollModifierTest.kt
@@ -53,6 +53,7 @@
 import kotlin.math.sign
 import kotlinx.coroutines.isActive
 import kotlinx.coroutines.runBlocking
+import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -981,6 +982,7 @@
         }
     }
 
+    @Ignore // This is failing in some APIs, but it's fixed for impulse.
     @Test
     fun nestedScroll_movingTarget_velocityShouldRespectSign() {
         var lastVelocity = Velocity.Zero
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WrapperTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WrapperTest.kt
index f6d5329..e67101a 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WrapperTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WrapperTest.kt
@@ -140,9 +140,9 @@
         assertTrue(composedLatch.await(1, TimeUnit.SECONDS))
 
         activityScenario.onActivity {
-            assertEquals(2, owner.observerCount)
+            assertEquals(3, owner.observerCount)
             view.disposeComposition()
-            assertEquals(1, owner.observerCount)
+            assertEquals(2, owner.observerCount)
         }
     }
 
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt
index d8504fad..2b9e3ba 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt
@@ -41,6 +41,7 @@
 import androidx.compose.ui.node.DelegatingNode
 import androidx.compose.ui.node.ModifierNodeElement
 import androidx.compose.ui.platform.InspectableValue
+import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.ValueElement
 import androidx.compose.ui.platform.isDebugInspectorInfoEnabled
 import androidx.compose.ui.platform.testTag
@@ -161,6 +162,33 @@
     }
 
     @Test
+    @Suppress("DEPRECATION")
+    fun isContainerPropertyDeprecated() {
+        rule.setContent {
+            Surface {
+                Box(Modifier
+                    .testTag(TestTag)
+                    .semantics { isContainer = true }
+                ) {
+                    Text("Hello World", modifier = Modifier.padding(8.dp))
+                }
+            }
+        }
+
+        // Since `isContainer` has been deprecated, setting that property will actually set
+        // `isTraversalGroup` instead, but `IsContainer` can still be used to retrieve the value
+        rule.onNodeWithTag(TestTag)
+            .assert(
+                SemanticsMatcher("container property") {
+                    it.config.getOrNull(SemanticsProperties.IsContainer) == true
+                }
+            )
+        rule.onNodeWithTag(TestTag)
+            .assert(SemanticsMatcher.expectValue(
+                SemanticsProperties.IsTraversalGroup, true))
+    }
+
+    @Test
     fun depthFirstPropertyConcat() {
         val root = "root"
         val child1 = "child1"
@@ -959,6 +987,69 @@
     }
 
     @Test
+    fun testBoundInParent() {
+        rule.setContent {
+            with(LocalDensity.current) {
+                Box(
+                    Modifier
+                        .size(100.toDp())
+                        .padding(10.toDp(), 20.toDp())
+                        .semantics {}
+                ) {
+                    Box(
+                        Modifier
+                            .size(10.toDp())
+                            .offset(20.toDp(), 30.toDp())
+                    ) {
+                        Box(Modifier
+                            .size(1.toDp())
+                            .testTag(TestTag)) {}
+                    }
+                }
+            }
+        }
+
+        rule.waitForIdle()
+
+        val bounds = rule.onNodeWithTag(TestTag, true).fetchSemanticsNode().boundsInParent
+        assertEquals(
+            Rect(20.0f, 30.0f, 21.0f, 31.0f),
+            bounds
+        )
+    }
+
+    @Test
+    fun testBoundInParent_boundInRootWhenNoParent() {
+        rule.setContent {
+            with(LocalDensity.current) {
+                Box(
+                    Modifier
+                        .size(100.toDp())
+                        .padding(10.toDp(), 20.toDp())
+                ) {
+                    Box(
+                        Modifier
+                            .size(10.toDp())
+                            .offset(20.toDp(), 30.toDp())
+                    ) {
+                        Box(Modifier
+                            .size(1.toDp())
+                            .testTag(TestTag)) {}
+                    }
+                }
+            }
+        }
+
+        rule.waitForIdle()
+
+        val bounds = rule.onNodeWithTag(TestTag, true).fetchSemanticsNode().boundsInParent
+        assertEquals(
+            Rect(30.0f, 50.0f, 31.0f, 51.0f),
+            bounds
+        )
+    }
+
+    @Test
     fun testRegenerateSemanticsId() {
         var reuseKey by mutableStateOf(0)
         rule.setContent {
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/viewinterop/VelocityTrackingParityTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/viewinterop/VelocityTrackingParityTest.kt
new file mode 100644
index 0000000..1736506
--- /dev/null
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/viewinterop/VelocityTrackingParityTest.kt
@@ -0,0 +1,197 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * 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 androidx.compose.ui.viewinterop
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.MotionEvent
+import android.view.VelocityTracker
+import android.view.View
+import androidx.activity.ComponentActivity
+import androidx.annotation.LayoutRes
+import androidx.compose.foundation.gestures.Orientation
+import androidx.compose.foundation.gestures.draggable
+import androidx.compose.foundation.gestures.rememberDraggableState
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.ExperimentalComposeUiApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.background
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.input.pointer.util.VelocityTrackerAddPointsFix
+import androidx.compose.ui.platform.ComposeView
+import androidx.compose.ui.test.junit4.createAndroidComposeRule
+import androidx.compose.ui.tests.R
+import androidx.compose.ui.unit.Velocity
+import androidx.lifecycle.Lifecycle
+import androidx.test.core.app.ActivityScenario
+import androidx.test.espresso.Espresso
+import androidx.test.espresso.action.ViewActions.swipeUp
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertTrue
+import kotlinx.coroutines.CoroutineScope
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+class VelocityTrackingParityTest {
+
+    @get:Rule
+    val rule = createAndroidComposeRule<ComponentActivity>()
+
+    private val draggableView: VelocityTrackingView
+        get() = rule.activity.findViewById(R.id.draggable_view)
+
+    private val composeView: ComposeView
+        get() = rule.activity.findViewById(R.id.compose_view)
+
+    private var latestComposeVelocity = 0f
+
+    @OptIn(ExperimentalComposeUiApi::class)
+    @Before
+    fun setUp() {
+        latestComposeVelocity = 0f
+        VelocityTrackerAddPointsFix = true
+    }
+
+    fun tearDown() {
+        draggableView.tearDown()
+    }
+
+    @Test
+    fun equalDraggable_withEqualSwipes_shouldProduceSimilarVelocity() {
+        // Arrange
+        createActivity()
+        checkVisibility(composeView, View.VISIBLE)
+        checkVisibility(draggableView, View.GONE)
+
+        // Act
+        swipeView(R.id.compose_view)
+
+        val currentTopInCompose = latestComposeVelocity
+
+        // switch visibility
+        rule.runOnUiThread {
+            composeView.visibility = View.GONE
+            draggableView.visibility = View.VISIBLE
+        }
+
+        checkVisibility(composeView, View.GONE)
+        checkVisibility(draggableView, View.VISIBLE)
+
+        swipeView(R.id.draggable_view)
+        val childAtTheTopOfView = draggableView.latestVelocity.y
+
+        // assert
+        assertThat(childAtTheTopOfView).isWithin(VelocityDifferenceTolerance)
+            .of(currentTopInCompose)
+    }
+
+    private fun createActivity() {
+        rule
+            .activityRule
+            .scenario
+            .createActivityWithComposeContent(
+                R.layout.velocity_tracker_compose_vs_view
+            ) {
+                TestComposeDraggable {
+                    latestComposeVelocity = it
+                }
+            }
+    }
+
+    private fun checkVisibility(view: View, visibility: Int) = assertTrue {
+        view.visibility == visibility
+    }
+
+    private fun swipeView(id: Int) {
+        Espresso.onView(withId(id)).perform(swipeUp())
+        rule.waitForIdle()
+    }
+}
+
+@Composable
+fun TestComposeDraggable(onDragStopped: suspend CoroutineScope.(velocity: Float) -> Unit) {
+    Box(
+        Modifier
+            .fillMaxSize()
+            .background(Color.Black)
+            .draggable(
+                rememberDraggableState(onDelta = { }),
+                onDragStopped = onDragStopped,
+                orientation = Orientation.Vertical
+            )
+    )
+}
+
+private fun ActivityScenario<*>.createActivityWithComposeContent(
+    @LayoutRes layout: Int,
+    content: @Composable () -> Unit,
+) {
+    onActivity { activity ->
+        activity.setTheme(R.style.Theme_MaterialComponents_Light)
+        activity.setContentView(layout)
+        with(activity.findViewById<ComposeView>(R.id.compose_view)) {
+            setContent(content)
+        }
+
+        activity.findViewById<VelocityTrackingView>(R.id.draggable_view)?.visibility =
+            View.GONE
+    }
+    moveToState(Lifecycle.State.RESUMED)
+}
+
+/**
+ * A view that adds data to a VelocityTracker.
+ */
+private class VelocityTrackingView(context: Context, attributeSet: AttributeSet) :
+    View(context, attributeSet) {
+    private val tracker = VelocityTracker.obtain()
+    var latestVelocity: Velocity = Velocity.Zero
+    override fun onTouchEvent(event: MotionEvent?): Boolean {
+        when (event?.action) {
+            MotionEvent.ACTION_UP -> {
+                tracker.computeCurrentVelocity(1000)
+                latestVelocity = Velocity(tracker.xVelocity, tracker.yVelocity)
+                tracker.clear()
+            }
+
+            MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE -> tracker.addMovement(
+                event
+            )
+
+            else -> {
+                tracker.clear()
+                latestVelocity = Velocity.Zero
+            }
+        }
+        return true
+    }
+
+    fun tearDown() {
+        tracker.recycle()
+    }
+}
+
+private const val VelocityDifferenceTolerance = 10f
\ No newline at end of file
diff --git a/compose/ui/ui/src/androidAndroidTest/res/layout/velocity_tracker_compose_vs_view.xml b/compose/ui/ui/src/androidAndroidTest/res/layout/velocity_tracker_compose_vs_view.xml
new file mode 100644
index 0000000..3228c1f
--- /dev/null
+++ b/compose/ui/ui/src/androidAndroidTest/res/layout/velocity_tracker_compose_vs_view.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Copyright 2023 The Android Open Source Project
+
+  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.
+  -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <androidx.compose.ui.viewinterop.VelocityTrackingView
+        android:id="@+id/draggable_view"
+        android:background="@android:color/white"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+    <androidx.compose.ui.platform.ComposeView
+        android:id="@+id/compose_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+</FrameLayout>
\ No newline at end of file
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/MotionEventAdapter.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/MotionEventAdapter.android.kt
index af1dbfc..87e8d66 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/MotionEventAdapter.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/MotionEventAdapter.android.kt
@@ -39,6 +39,7 @@
 import androidx.annotation.VisibleForTesting
 import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.util.VelocityTrackerAddPointsFix
 
 /**
  * Converts Android framework [MotionEvent]s into Compose [PointerInputEvent]s.
@@ -157,6 +158,7 @@
                     motionEventToComposePointerIdMap.put(pointerId, nextId++)
                 }
             }
+
             ACTION_DOWN,
             ACTION_POINTER_DOWN -> {
                 val actionIndex = motionEvent.actionIndex
@@ -288,7 +290,11 @@
                 if (x.isFinite() && y.isFinite()) {
                     val historicalChange = HistoricalChange(
                         getHistoricalEventTime(pos),
-                        Offset(x, y)
+                        if (VelocityTrackerAddPointsFix) {
+                            positionCalculator.screenToLocal(Offset(x, y))
+                        } else {
+                            Offset(x, y)
+                        }
                     )
                     historical.add(historicalChange)
                 }
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
index 553e319..3a9af47 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
@@ -1207,6 +1207,7 @@
         _inputModeManager.inputMode = if (isInTouchMode) Touch else Keyboard
 
         viewTreeOwners!!.lifecycleOwner.lifecycle.addObserver(this)
+        viewTreeOwners!!.lifecycleOwner.lifecycle.addObserver(accessibilityDelegate)
         viewTreeObserver.addOnGlobalLayoutListener(globalLayoutListener)
         viewTreeObserver.addOnScrollChangedListener(scrollChangedListener)
         viewTreeObserver.addOnTouchModeChangeListener(touchModeChangeListener)
@@ -1216,6 +1217,7 @@
         super.onDetachedFromWindow()
         snapshotObserver.stopObserving()
         viewTreeOwners?.lifecycleOwner?.lifecycle?.removeObserver(this)
+        viewTreeOwners?.lifecycleOwner?.lifecycle?.removeObserver(accessibilityDelegate)
         ifDebug {
             if (autofillSupported()) {
                 _autofill?.let { AutofillCallback.unregister(it) }
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
index 3baff06..0375eb2 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
@@ -97,7 +97,9 @@
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat
 import androidx.core.view.accessibility.AccessibilityNodeProviderCompat
 import androidx.core.view.contentcapture.ContentCaptureSessionCompat
+import androidx.lifecycle.DefaultLifecycleObserver
 import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
 import kotlin.math.abs
 import kotlin.math.ceil
 import kotlin.math.floor
@@ -190,7 +192,8 @@
 
 @OptIn(InternalTextApi::class)
 internal class AndroidComposeViewAccessibilityDelegateCompat(val view: AndroidComposeView) :
-    AccessibilityDelegateCompat() {
+    AccessibilityDelegateCompat(),
+    DefaultLifecycleObserver {
     companion object {
         /** Virtual node identifier value for invalid nodes. */
         const val InvalidId = Integer.MIN_VALUE
@@ -451,6 +454,14 @@
         })
     }
 
+    override fun onStart(owner: LifecycleOwner) {
+        initContentCaptureSemanticsStructureChangeEvents(onStart = true)
+    }
+
+    override fun onStop(owner: LifecycleOwner) {
+        initContentCaptureSemanticsStructureChangeEvents(onStart = false)
+    }
+
     /**
      * Returns true if there is any semantics node in the tree that can scroll in the given
      * [orientation][vertical] and [direction] at the given [position] in the view associated with
@@ -2787,7 +2798,7 @@
             structure.setClassName(it)
         }
 
-        with(boundsInWindow) {
+        with(boundsInParent) {
             structure.setDimens(
                 left.toInt(), top.toInt(), 0, 0, width.toInt(), height.toInt()
             )
@@ -2842,9 +2853,22 @@
         }
     }
 
-    private fun notifySubtreeAppeared(node: SemanticsNode) {
+    private fun updateContentCaptureBuffersOnAppeared(node: SemanticsNode) {
+        if (!isEnabledForContentCapture) {
+            return
+        }
         bufferContentCaptureViewAppeared(node.id, node.toViewStructure())
-        node.replacedChildren.fastForEach { child -> notifySubtreeAppeared(child) }
+        node.replacedChildren.fastForEach { child -> updateContentCaptureBuffersOnAppeared(child) }
+    }
+
+    private fun updateContentCaptureBuffersOnDisappeared(node: SemanticsNode) {
+        if (!isEnabledForContentCapture) {
+            return
+        }
+        bufferContentCaptureViewDisappeared(node.id)
+        node.replacedChildren.fastForEach {
+                child -> updateContentCaptureBuffersOnDisappeared(child)
+        }
     }
 
     private fun sendAccessibilitySemanticsStructureChangeEvents(
@@ -2880,6 +2904,19 @@
         }
     }
 
+    internal fun initContentCaptureSemanticsStructureChangeEvents(onStart: Boolean) {
+        if (!isEnabledForContentCapture) {
+            return
+        }
+
+        if (onStart) {
+            updateContentCaptureBuffersOnAppeared(view.semanticsOwner.unmergedRootSemanticsNode)
+        } else {
+            updateContentCaptureBuffersOnDisappeared(view.semanticsOwner.unmergedRootSemanticsNode)
+        }
+        notifyContentCaptureChanges()
+    }
+
     @VisibleForTesting
     internal fun sendContentCaptureSemanticsStructureChangeEvents(
         newNode: SemanticsNode,
@@ -2889,7 +2926,7 @@
         newNode.replacedChildren.fastForEach { child ->
             if (currentSemanticsNodes.contains(child.id) &&
                 !oldNode.children.contains(child.id)) {
-                notifySubtreeAppeared(child)
+                updateContentCaptureBuffersOnAppeared(child)
             }
         }
         // Notify content capture disappear
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/util/VelocityTracker.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/util/VelocityTracker.kt
index 6d35f30..d73b265 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/util/VelocityTracker.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/util/VelocityTracker.kt
@@ -16,10 +16,14 @@
 
 package androidx.compose.ui.input.pointer.util
 
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.input.pointer.PointerInputChange
 import androidx.compose.ui.input.pointer.changedToDownIgnoreConsumed
+import androidx.compose.ui.input.pointer.changedToUpIgnoreConsumed
 import androidx.compose.ui.unit.Velocity
 import androidx.compose.ui.util.fastForEach
 import kotlin.math.abs
@@ -49,6 +53,7 @@
     private val yVelocityTracker = VelocityTracker1D() // non-differential, Lsq2 1D velocity tracker
 
     internal var currentPointerPositionAccumulator = Offset.Zero
+    internal var lastMoveEventTimeStamp = 0L
 
     /**
      * Adds a position at the given time to the tracker.
@@ -152,6 +157,7 @@
          */
         Impulse,
     }
+
     // Circular buffer; current sample at index.
     private val samples: Array<DataPointAtTime?> = arrayOfNulls(HistorySize)
     private var index: Int = 0
@@ -223,6 +229,7 @@
                 Strategy.Impulse -> {
                     calculateImpulseVelocity(dataPoints, time, sampleCount, isDataDifferential)
                 }
+
                 Strategy.Lsq2 -> {
                     calculateLeastSquaresVelocity(dataPoints, time, sampleCount)
                 }
@@ -300,7 +307,16 @@
  *
  * @param event Pointer change to track.
  */
+@OptIn(ExperimentalComposeUiApi::class)
 fun VelocityTracker.addPointerInputChange(event: PointerInputChange) {
+    if (VelocityTrackerAddPointsFix) {
+        addPointerInputChangeWithFix(event)
+    } else {
+        addPointerInputChangeLegacy(event)
+    }
+}
+
+private fun VelocityTracker.addPointerInputChangeLegacy(event: PointerInputChange) {
 
     // Register down event as the starting point for the accumulator
     if (event.changedToDownIgnoreConsumed()) {
@@ -335,6 +351,48 @@
     addPosition(event.uptimeMillis, currentPointerPositionAccumulator)
 }
 
+private fun VelocityTracker.addPointerInputChangeWithFix(event: PointerInputChange) {
+    // If this is ACTION_DOWN: Register down event as the starting point for the accumulator
+    // Since compose uses relative positions, for a more accurate velocity calculation we'll need
+    // to transform all events positions. We use the start of the movement signaled by the DOWN
+    // event as the start point. Any subsequent event will be accumulated into
+    // [currentPointerPositionAccumulator] and used to update the tracker.
+    // We also use this to reset [lastMoveEventTimeStamp].
+    if (event.changedToDownIgnoreConsumed()) {
+        lastMoveEventTimeStamp = 0L
+        currentPointerPositionAccumulator = event.position
+        resetTracking()
+        return
+    }
+
+    // If this is a ACTION_MOVE event: Add events to the tracker as per the platform implementation.
+    // ACTION_MOVE may or may not have a historical array. If they do have a historical array, use
+    // the data provided by the array only, if they do not have historical data, use the data
+    // provided by the event itself. This is in line with the platform implementation.
+    @OptIn(ExperimentalComposeUiApi::class)
+    if (!event.changedToUpIgnoreConsumed() && !event.changedToDownIgnoreConsumed()) {
+        lastMoveEventTimeStamp = event.uptimeMillis
+        if (event.historical.isEmpty()) {
+            val delta = event.position - currentPointerPositionAccumulator
+            currentPointerPositionAccumulator += delta
+            addPosition(event.uptimeMillis, currentPointerPositionAccumulator)
+        } else {
+            event.historical.fastForEach {
+                val historicalDelta = it.position - currentPointerPositionAccumulator
+                // Update the current position with the historical delta and add it to the tracker
+                currentPointerPositionAccumulator += historicalDelta
+                addPosition(it.uptimeMillis, currentPointerPositionAccumulator)
+            }
+        }
+    }
+
+    // If this is ACTION_UP. Fix for b/238654963. If there's been enough time after the last MOVE
+    // event, reset the tracker.
+    if (event.changedToUpIgnoreConsumed() && (event.uptimeMillis - lastMoveEventTimeStamp) > 40L) {
+        resetTracking()
+    }
+}
+
 internal data class DataPointAtTime(var time: Long, var dataPoint: Float)
 
 /**
@@ -555,8 +613,8 @@
             return 0f
         }
         val dataPointsDelta =
-            // For differential data ponits, each measurement reflects the amount of change in the
-            // subject's position. However, the first sample is discarded in computation because we
+        // For differential data ponits, each measurement reflects the amount of change in the
+        // subject's position. However, the first sample is discarded in computation because we
             // don't know the time duration over which this change has occurred.
             if (isDataDifferential) dataPoints[0]
             else dataPoints[0] - dataPoints[1]
@@ -615,3 +673,16 @@
 private inline operator fun Matrix.set(row: Int, col: Int, value: Float) {
     this[row][col] = value
 }
+
+/**
+ * A flag to indicate that we'll use the fix of how we add points to the velocity tracker.
+ *
+ * This flag will be removed by 1.6 beta01. If you find any issues with the new fix, flip this
+ * flag to false to confirm they are newly introduced then file a bug.
+ */
+@Suppress("GetterSetterNames", "OPT_IN_MARKER_ON_WRONG_TARGET")
+@get:Suppress("GetterSetterNames")
+@get:ExperimentalComposeUiApi
+@set:ExperimentalComposeUiApi
+@ExperimentalComposeUiApi
+var VelocityTrackerAddPointsFix: Boolean by mutableStateOf(false)
\ No newline at end of file
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt
index bb78b7e..1c5a975 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt
@@ -175,6 +175,18 @@
             ?: Offset.Zero
 
     /**
+     * The bounding box for this node relative to the parent semantics node, with clipping applied.
+     */
+    internal val boundsInParent: Rect
+        get() {
+            val parent = this.parent ?: return Rect.Zero
+            val currentCoordinates = findCoordinatorToGetBounds()?.takeIf { it.isAttached }
+                ?.coordinates ?: return Rect.Zero
+            return parent.outerSemanticsNode.requireCoordinator(Nodes.Semantics)
+                .localBoundingBoxOf(currentCoordinates)
+        }
+
+    /**
      * Whether this node is transparent.
      */
     internal val isTransparent: Boolean
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt
index 41096b6..bfaf001 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt
@@ -101,7 +101,8 @@
     @Deprecated("Use `isTraversalGroup` instead.",
         replaceWith = ReplaceWith("IsTraversalGroup"),
     )
-    val IsContainer = SemanticsPropertyKey<Boolean>("IsTraversalGroup")
+    val IsContainer: SemanticsPropertyKey<Boolean>
+        get() = IsTraversalGroup
 
     /**us
      * @see SemanticsPropertyReceiver.isTraversalGroup
diff --git a/core/core-ktx/api/current.txt b/core/core-ktx/api/current.txt
index 578da41..7a12effb 100644
--- a/core/core-ktx/api/current.txt
+++ b/core/core-ktx/api/current.txt
@@ -614,7 +614,7 @@
     method public static inline void setPadding(android.view.View, @Px int size);
     method public static inline void setVisible(android.view.View, boolean);
     method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
-    method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParamsTyped(android.view.View, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> block);
+    method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParamsTyped(android.view.View, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
     method public static inline void updatePadding(android.view.View, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
     method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
   }
diff --git a/core/core-ktx/api/restricted_current.txt b/core/core-ktx/api/restricted_current.txt
index 578da41..7a12effb 100644
--- a/core/core-ktx/api/restricted_current.txt
+++ b/core/core-ktx/api/restricted_current.txt
@@ -614,7 +614,7 @@
     method public static inline void setPadding(android.view.View, @Px int size);
     method public static inline void setVisible(android.view.View, boolean);
     method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
-    method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParamsTyped(android.view.View, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> block);
+    method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParamsTyped(android.view.View, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
     method public static inline void updatePadding(android.view.View, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
     method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
   }
diff --git a/development/project-creator/compose-template/groupId/artifactId/build.gradle b/development/project-creator/compose-template/groupId/artifactId/build.gradle
index e09ec31..d169a63 100644
--- a/development/project-creator/compose-template/groupId/artifactId/build.gradle
+++ b/development/project-creator/compose-template/groupId/artifactId/build.gradle
@@ -21,7 +21,6 @@
     id("AndroidXPlugin")
     id("AndroidXComposePlugin")
     id("com.android.library")
-    id("org.jetbrains.kotlin.android")
 }
 
 def desktopEnabled = KmpPlatformsKt.enableDesktop(project)
diff --git a/fragment/fragment-ktx/api/current.ignore b/fragment/fragment-ktx/api/current.ignore
new file mode 100644
index 0000000..fd7e670
--- /dev/null
+++ b/fragment/fragment-ktx/api/current.ignore
@@ -0,0 +1,11 @@
+// Baseline format: 1.0
+ChangedType: androidx.fragment.app.FragmentViewModelLazyKt#activityViewModels(androidx.fragment.app.Fragment, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.fragment.app.FragmentViewModelLazyKt.activityViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.fragment.app.FragmentViewModelLazyKt#activityViewModels(androidx.fragment.app.Fragment, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.fragment.app.FragmentViewModelLazyKt.activityViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.fragment.app.FragmentViewModelLazyKt#createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.fragment.app.FragmentViewModelLazyKt.createViewModelLazy has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.fragment.app.FragmentViewModelLazyKt#viewModels(androidx.fragment.app.Fragment, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.fragment.app.FragmentViewModelLazyKt.viewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.fragment.app.FragmentViewModelLazyKt#viewModels(androidx.fragment.app.Fragment, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.fragment.app.FragmentViewModelLazyKt.viewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
diff --git a/fragment/fragment-ktx/api/current.txt b/fragment/fragment-ktx/api/current.txt
index 8d67e0b..94e8371 100644
--- a/fragment/fragment-ktx/api/current.txt
+++ b/fragment/fragment-ktx/api/current.txt
@@ -21,12 +21,12 @@
   }
 
   public final class FragmentViewModelLazyKt {
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
     method @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
   }
 
   public final class ViewKt {
diff --git a/fragment/fragment-ktx/api/restricted_current.ignore b/fragment/fragment-ktx/api/restricted_current.ignore
new file mode 100644
index 0000000..fd7e670
--- /dev/null
+++ b/fragment/fragment-ktx/api/restricted_current.ignore
@@ -0,0 +1,11 @@
+// Baseline format: 1.0
+ChangedType: androidx.fragment.app.FragmentViewModelLazyKt#activityViewModels(androidx.fragment.app.Fragment, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.fragment.app.FragmentViewModelLazyKt.activityViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.fragment.app.FragmentViewModelLazyKt#activityViewModels(androidx.fragment.app.Fragment, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.fragment.app.FragmentViewModelLazyKt.activityViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.fragment.app.FragmentViewModelLazyKt#createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.fragment.app.FragmentViewModelLazyKt.createViewModelLazy has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.fragment.app.FragmentViewModelLazyKt#viewModels(androidx.fragment.app.Fragment, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.fragment.app.FragmentViewModelLazyKt.viewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.fragment.app.FragmentViewModelLazyKt#viewModels(androidx.fragment.app.Fragment, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.fragment.app.FragmentViewModelLazyKt.viewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
diff --git a/fragment/fragment-ktx/api/restricted_current.txt b/fragment/fragment-ktx/api/restricted_current.txt
index 8d67e0b..94e8371 100644
--- a/fragment/fragment-ktx/api/restricted_current.txt
+++ b/fragment/fragment-ktx/api/restricted_current.txt
@@ -21,12 +21,12 @@
   }
 
   public final class FragmentViewModelLazyKt {
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
     method @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
   }
 
   public final class ViewKt {
diff --git a/glance/glance-appwidget/api/1.0.0-beta02.txt b/glance/glance-appwidget/api/1.0.0-beta02.txt
index 37f992a..d197a7a 100644
--- a/glance/glance-appwidget/api/1.0.0-beta02.txt
+++ b/glance/glance-appwidget/api/1.0.0-beta02.txt
@@ -64,7 +64,7 @@
   public final class GlanceAppWidgetKt {
     method public static suspend Object? provideContent(androidx.glance.appwidget.GlanceAppWidget, kotlin.jvm.functions.Function0<kotlin.Unit> content, kotlin.coroutines.Continuation<?>);
     method public static suspend Object? updateAll(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method public static suspend inline <reified State> void updateIf(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, kotlin.jvm.functions.Function1<? super State,? extends java.lang.Boolean> predicate);
+    method public static suspend inline <reified State> void updateIf(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, kotlin.jvm.functions.Function1<? super State,java.lang.Boolean> predicate);
   }
 
   public final class GlanceAppWidgetManager {
diff --git a/glance/glance-appwidget/api/current.txt b/glance/glance-appwidget/api/current.txt
index 37f992a..d197a7a 100644
--- a/glance/glance-appwidget/api/current.txt
+++ b/glance/glance-appwidget/api/current.txt
@@ -64,7 +64,7 @@
   public final class GlanceAppWidgetKt {
     method public static suspend Object? provideContent(androidx.glance.appwidget.GlanceAppWidget, kotlin.jvm.functions.Function0<kotlin.Unit> content, kotlin.coroutines.Continuation<?>);
     method public static suspend Object? updateAll(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method public static suspend inline <reified State> void updateIf(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, kotlin.jvm.functions.Function1<? super State,? extends java.lang.Boolean> predicate);
+    method public static suspend inline <reified State> void updateIf(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, kotlin.jvm.functions.Function1<? super State,java.lang.Boolean> predicate);
   }
 
   public final class GlanceAppWidgetManager {
diff --git a/glance/glance-appwidget/api/restricted_1.0.0-beta02.txt b/glance/glance-appwidget/api/restricted_1.0.0-beta02.txt
index 37f992a..d197a7a 100644
--- a/glance/glance-appwidget/api/restricted_1.0.0-beta02.txt
+++ b/glance/glance-appwidget/api/restricted_1.0.0-beta02.txt
@@ -64,7 +64,7 @@
   public final class GlanceAppWidgetKt {
     method public static suspend Object? provideContent(androidx.glance.appwidget.GlanceAppWidget, kotlin.jvm.functions.Function0<kotlin.Unit> content, kotlin.coroutines.Continuation<?>);
     method public static suspend Object? updateAll(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method public static suspend inline <reified State> void updateIf(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, kotlin.jvm.functions.Function1<? super State,? extends java.lang.Boolean> predicate);
+    method public static suspend inline <reified State> void updateIf(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, kotlin.jvm.functions.Function1<? super State,java.lang.Boolean> predicate);
   }
 
   public final class GlanceAppWidgetManager {
diff --git a/glance/glance-appwidget/api/restricted_current.txt b/glance/glance-appwidget/api/restricted_current.txt
index 37f992a..d197a7a 100644
--- a/glance/glance-appwidget/api/restricted_current.txt
+++ b/glance/glance-appwidget/api/restricted_current.txt
@@ -64,7 +64,7 @@
   public final class GlanceAppWidgetKt {
     method public static suspend Object? provideContent(androidx.glance.appwidget.GlanceAppWidget, kotlin.jvm.functions.Function0<kotlin.Unit> content, kotlin.coroutines.Continuation<?>);
     method public static suspend Object? updateAll(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method public static suspend inline <reified State> void updateIf(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, kotlin.jvm.functions.Function1<? super State,? extends java.lang.Boolean> predicate);
+    method public static suspend inline <reified State> void updateIf(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, kotlin.jvm.functions.Function1<? super State,java.lang.Boolean> predicate);
   }
 
   public final class GlanceAppWidgetManager {
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 5eab30c..b706d0b 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -46,7 +46,7 @@
 ktlint = "0.46.0-20220520.192227-74"
 leakcanary = "2.8.1"
 media3 = "1.0.0-beta03"
-metalava = "1.0.0-alpha07"
+metalava = "1.0.0-alpha08"
 mockito = "2.25.0"
 moshi = "1.13.0"
 protobuf = "3.21.8"
diff --git a/graphics/filters/filters/lint-baseline.xml b/graphics/filters/filters/lint-baseline.xml
index 9a42e316..efe83da 100644
--- a/graphics/filters/filters/lint-baseline.xml
+++ b/graphics/filters/filters/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.1.0-alpha07">
+<issues format="6" by="lint 8.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta02)" variant="all" version="8.1.0-beta02">
 
     <issue
         id="UnsafeOptInUsageError"
diff --git a/graphics/graphics-core/api/current.txt b/graphics/graphics-core/api/current.txt
index d7e7ba8..d9f2b2f 100644
--- a/graphics/graphics-core/api/current.txt
+++ b/graphics/graphics-core/api/current.txt
@@ -164,7 +164,7 @@
   }
 
   public final class EGLConfigAttributesKt {
-    method @kotlin.jvm.JvmSynthetic public static inline androidx.graphics.opengl.egl.EGLConfigAttributes EGLConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EGLConfigAttributes.Builder,? extends kotlin.Unit> block);
+    method @kotlin.jvm.JvmSynthetic public static inline androidx.graphics.opengl.egl.EGLConfigAttributes EGLConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EGLConfigAttributes.Builder,kotlin.Unit> block);
   }
 
   public final class EGLException extends java.lang.RuntimeException {
diff --git a/graphics/graphics-core/api/public_plus_experimental_current.txt b/graphics/graphics-core/api/public_plus_experimental_current.txt
index d7e7ba8..d9f2b2f 100644
--- a/graphics/graphics-core/api/public_plus_experimental_current.txt
+++ b/graphics/graphics-core/api/public_plus_experimental_current.txt
@@ -164,7 +164,7 @@
   }
 
   public final class EGLConfigAttributesKt {
-    method @kotlin.jvm.JvmSynthetic public static inline androidx.graphics.opengl.egl.EGLConfigAttributes EGLConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EGLConfigAttributes.Builder,? extends kotlin.Unit> block);
+    method @kotlin.jvm.JvmSynthetic public static inline androidx.graphics.opengl.egl.EGLConfigAttributes EGLConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EGLConfigAttributes.Builder,kotlin.Unit> block);
   }
 
   public final class EGLException extends java.lang.RuntimeException {
diff --git a/graphics/graphics-core/api/restricted_current.txt b/graphics/graphics-core/api/restricted_current.txt
index 4a220ca..cf8f638 100644
--- a/graphics/graphics-core/api/restricted_current.txt
+++ b/graphics/graphics-core/api/restricted_current.txt
@@ -165,7 +165,7 @@
   }
 
   public final class EGLConfigAttributesKt {
-    method @kotlin.jvm.JvmSynthetic public static inline androidx.graphics.opengl.egl.EGLConfigAttributes EGLConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EGLConfigAttributes.Builder,? extends kotlin.Unit> block);
+    method @kotlin.jvm.JvmSynthetic public static inline androidx.graphics.opengl.egl.EGLConfigAttributes EGLConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EGLConfigAttributes.Builder,kotlin.Unit> block);
   }
 
   public final class EGLException extends java.lang.RuntimeException {
diff --git a/graphics/graphics-core/lint-baseline.xml b/graphics/graphics-core/lint-baseline.xml
deleted file mode 100644
index e92cd67..0000000
--- a/graphics/graphics-core/lint-baseline.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.1.0-alpha07">
-
-    <issue
-        id="BanHideAnnotation"
-        message="@hide is not allowed in Javadoc"
-        errorLine1="        annotation class EGLSyncAttribute"
-        errorLine2="                         ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/opengl/EGLExt.kt"/>
-    </issue>
-
-    <issue
-        id="BanHideAnnotation"
-        message="@hide is not allowed in Javadoc"
-        errorLine1="        annotation class EGLFenceType"
-        errorLine2="                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/opengl/EGLExt.kt"/>
-    </issue>
-
-    <issue
-        id="BanHideAnnotation"
-        message="@hide is not allowed in Javadoc"
-        errorLine1="        annotation class EGLClientWaitResult"
-        errorLine2="                         ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/opengl/EGLExt.kt"/>
-    </issue>
-
-</issues>
diff --git a/graphics/graphics-core/src/main/java/androidx/opengl/EGLExt.kt b/graphics/graphics-core/src/main/java/androidx/opengl/EGLExt.kt
index 3d2962a..1014478 100644
--- a/graphics/graphics-core/src/main/java/androidx/opengl/EGLExt.kt
+++ b/graphics/graphics-core/src/main/java/androidx/opengl/EGLExt.kt
@@ -20,6 +20,7 @@
 import android.os.Build
 import androidx.annotation.IntDef
 import androidx.annotation.RequiresApi
+import androidx.annotation.RestrictTo
 import androidx.graphics.opengl.egl.EGLConfigAttributes
 import androidx.hardware.SyncFenceCompat
 import androidx.hardware.SyncFenceV19
@@ -204,9 +205,8 @@
 
         /**
          * Specifies the types of attributes that can be queried in [eglGetSyncAttribKHR]
-         *
-         * @hide
          */
+        @RestrictTo(RestrictTo.Scope.LIBRARY)
         @Suppress("AcronymName")
         @IntDef(value = [EGL_SYNC_TYPE_KHR, EGL_SYNC_STATUS_KHR, EGL_SYNC_CONDITION_KHR])
         annotation class EGLSyncAttribute
@@ -263,9 +263,8 @@
 
         /**
          * Specifies the type of fence to create in [eglCreateSyncKHR]
-         *
-         * @hide
          */
+        @RestrictTo(RestrictTo.Scope.LIBRARY)
         @Suppress("AcronymName")
         @IntDef(value = [EGL_SYNC_FENCE_KHR, EGL_SYNC_NATIVE_FENCE_ANDROID])
         annotation class EGLFenceType
@@ -311,9 +310,8 @@
 
         /**
          * Specifies various return values for the [eglClientWaitSyncKHR] method
-         *
-         * @hide
          */
+        @RestrictTo(RestrictTo.Scope.LIBRARY)
         @Target(AnnotationTarget.TYPE)
         @Suppress("AcronymName")
         @IntDef(value = [EGL_CONDITION_SATISFIED_KHR, EGL_TIMEOUT_EXPIRED_KHR, EGL_FALSE])
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt
index cf45437..f986b53 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt
@@ -515,11 +515,14 @@
         is SleepSessionRecord ->
             intervalProto()
                 .setDataType(protoDataType("SleepSession"))
-                .putSubTypeDataLists("stages",
-                    DataProto.DataPoint.SubTypeDataList.newBuilder()
-                        .addAllValues(stages.map { it.toProto() }).build()
-                )
                 .apply {
+                    if (stages.isNotEmpty()) {
+                        putSubTypeDataLists(
+                            "stages",
+                            DataProto.DataPoint.SubTypeDataList.newBuilder()
+                                .addAllValues(stages.map { it.toProto() }).build()
+                        )
+                    }
                     title?.let { putValues("title", stringVal(it)) }
                     notes?.let { putValues("notes", stringVal(it)) }
                 }
diff --git a/hilt/hilt-navigation-fragment/api/current.ignore b/hilt/hilt-navigation-fragment/api/current.ignore
new file mode 100644
index 0000000..1d9ae1f
--- /dev/null
+++ b/hilt/hilt-navigation-fragment/api/current.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+ChangedType: androidx.hilt.navigation.fragment.HiltNavGraphViewModelLazyKt#hiltNavGraphViewModels(androidx.fragment.app.Fragment, int):
+    Method androidx.hilt.navigation.fragment.HiltNavGraphViewModelLazyKt.hiltNavGraphViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
diff --git a/hilt/hilt-navigation-fragment/api/current.txt b/hilt/hilt-navigation-fragment/api/current.txt
index 8fee0c8..7cbc428 100644
--- a/hilt/hilt-navigation-fragment/api/current.txt
+++ b/hilt/hilt-navigation-fragment/api/current.txt
@@ -2,7 +2,7 @@
 package androidx.hilt.navigation.fragment {
 
   public final class HiltNavGraphViewModelLazyKt {
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> hiltNavGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> hiltNavGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId);
   }
 
 }
diff --git a/hilt/hilt-navigation-fragment/api/public_plus_experimental_current.txt b/hilt/hilt-navigation-fragment/api/public_plus_experimental_current.txt
index 8fee0c8..7cbc428 100644
--- a/hilt/hilt-navigation-fragment/api/public_plus_experimental_current.txt
+++ b/hilt/hilt-navigation-fragment/api/public_plus_experimental_current.txt
@@ -2,7 +2,7 @@
 package androidx.hilt.navigation.fragment {
 
   public final class HiltNavGraphViewModelLazyKt {
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> hiltNavGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> hiltNavGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId);
   }
 
 }
diff --git a/hilt/hilt-navigation-fragment/api/restricted_current.ignore b/hilt/hilt-navigation-fragment/api/restricted_current.ignore
new file mode 100644
index 0000000..1d9ae1f
--- /dev/null
+++ b/hilt/hilt-navigation-fragment/api/restricted_current.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+ChangedType: androidx.hilt.navigation.fragment.HiltNavGraphViewModelLazyKt#hiltNavGraphViewModels(androidx.fragment.app.Fragment, int):
+    Method androidx.hilt.navigation.fragment.HiltNavGraphViewModelLazyKt.hiltNavGraphViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
diff --git a/hilt/hilt-navigation-fragment/api/restricted_current.txt b/hilt/hilt-navigation-fragment/api/restricted_current.txt
index 8fee0c8..7cbc428 100644
--- a/hilt/hilt-navigation-fragment/api/restricted_current.txt
+++ b/hilt/hilt-navigation-fragment/api/restricted_current.txt
@@ -2,7 +2,7 @@
 package androidx.hilt.navigation.fragment {
 
   public final class HiltNavGraphViewModelLazyKt {
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> hiltNavGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> hiltNavGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId);
   }
 
 }
diff --git a/navigation/navigation-compose/api/current.txt b/navigation/navigation-compose/api/current.txt
index 0f5f67e..6794d3e 100644
--- a/navigation/navigation-compose/api/current.txt
+++ b/navigation/navigation-compose/api/current.txt
@@ -32,11 +32,11 @@
   }
 
   public final class NavGraphBuilderKt {
-    method @Deprecated public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<? extends androidx.navigation.NamedNavArgument> arguments, optional java.util.List<? extends androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,? extends kotlin.Unit> content);
+    method @Deprecated public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
     method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.EnterTransition>? enterTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.ExitTransition>? exitTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.EnterTransition>? popEnterTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.ExitTransition>? popExitTransition, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
     method public static void dialog(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-    method @Deprecated public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<? extends androidx.navigation.NamedNavArgument> arguments, optional java.util.List<? extends androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,? extends kotlin.Unit> builder);
     method public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition>? enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition>? exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition>? popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition>? popExitTransition, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+    method @Deprecated public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
   }
 
   public final class NavHostControllerKt {
@@ -48,7 +48,7 @@
     method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier);
     method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> popExitTransition);
     method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional String? route, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> popExitTransition, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,? extends kotlin.Unit> builder);
+    method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
   }
 
 }
diff --git a/navigation/navigation-compose/api/public_plus_experimental_current.txt b/navigation/navigation-compose/api/public_plus_experimental_current.txt
index 0f5f67e..6794d3e 100644
--- a/navigation/navigation-compose/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-compose/api/public_plus_experimental_current.txt
@@ -32,11 +32,11 @@
   }
 
   public final class NavGraphBuilderKt {
-    method @Deprecated public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<? extends androidx.navigation.NamedNavArgument> arguments, optional java.util.List<? extends androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,? extends kotlin.Unit> content);
+    method @Deprecated public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
     method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.EnterTransition>? enterTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.ExitTransition>? exitTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.EnterTransition>? popEnterTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.ExitTransition>? popExitTransition, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
     method public static void dialog(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-    method @Deprecated public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<? extends androidx.navigation.NamedNavArgument> arguments, optional java.util.List<? extends androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,? extends kotlin.Unit> builder);
     method public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition>? enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition>? exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition>? popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition>? popExitTransition, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+    method @Deprecated public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
   }
 
   public final class NavHostControllerKt {
@@ -48,7 +48,7 @@
     method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier);
     method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> popExitTransition);
     method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional String? route, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> popExitTransition, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,? extends kotlin.Unit> builder);
+    method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
   }
 
 }
diff --git a/navigation/navigation-compose/api/restricted_current.txt b/navigation/navigation-compose/api/restricted_current.txt
index 0f5f67e..6794d3e 100644
--- a/navigation/navigation-compose/api/restricted_current.txt
+++ b/navigation/navigation-compose/api/restricted_current.txt
@@ -32,11 +32,11 @@
   }
 
   public final class NavGraphBuilderKt {
-    method @Deprecated public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<? extends androidx.navigation.NamedNavArgument> arguments, optional java.util.List<? extends androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,? extends kotlin.Unit> content);
+    method @Deprecated public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
     method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.EnterTransition>? enterTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.ExitTransition>? exitTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.EnterTransition>? popEnterTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.ExitTransition>? popExitTransition, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
     method public static void dialog(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-    method @Deprecated public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<? extends androidx.navigation.NamedNavArgument> arguments, optional java.util.List<? extends androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,? extends kotlin.Unit> builder);
     method public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition>? enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition>? exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition>? popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition>? popExitTransition, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+    method @Deprecated public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
   }
 
   public final class NavHostControllerKt {
@@ -48,7 +48,7 @@
     method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier);
     method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> popExitTransition);
     method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional String? route, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> popExitTransition, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,? extends kotlin.Unit> builder);
+    method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
   }
 
 }
diff --git a/navigation/navigation-dynamic-features-fragment/api/current.txt b/navigation/navigation-dynamic-features-fragment/api/current.txt
index cb9e340..adb3dae 100644
--- a/navigation/navigation-dynamic-features-fragment/api/current.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/current.txt
@@ -26,10 +26,10 @@
   public final class DynamicFragmentNavigatorDestinationBuilderKt {
     method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id);
     method @Deprecated public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
     method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route);
     method public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
   }
 
   public class DynamicNavHostFragment extends androidx.navigation.fragment.NavHostFragment {
diff --git a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt
index cb9e340..adb3dae 100644
--- a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt
@@ -26,10 +26,10 @@
   public final class DynamicFragmentNavigatorDestinationBuilderKt {
     method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id);
     method @Deprecated public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
     method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route);
     method public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
   }
 
   public class DynamicNavHostFragment extends androidx.navigation.fragment.NavHostFragment {
diff --git a/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt b/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt
index cb9e340..adb3dae 100644
--- a/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt
@@ -26,10 +26,10 @@
   public final class DynamicFragmentNavigatorDestinationBuilderKt {
     method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id);
     method @Deprecated public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
     method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route);
     method public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
   }
 
   public class DynamicNavHostFragment extends androidx.navigation.fragment.NavHostFragment {
diff --git a/navigation/navigation-fragment/api/current.ignore b/navigation/navigation-fragment/api/current.ignore
new file mode 100644
index 0000000..f04bc2f
--- /dev/null
+++ b/navigation/navigation-fragment/api/current.ignore
@@ -0,0 +1,9 @@
+// Baseline format: 1.0
+ChangedType: androidx.navigation.NavGraphViewModelLazyKt#navGraphViewModels(androidx.fragment.app.Fragment, String, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.navigation.NavGraphViewModelLazyKt.navGraphViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.navigation.NavGraphViewModelLazyKt#navGraphViewModels(androidx.fragment.app.Fragment, String, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.navigation.NavGraphViewModelLazyKt.navGraphViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.navigation.NavGraphViewModelLazyKt#navGraphViewModels(androidx.fragment.app.Fragment, int, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.navigation.NavGraphViewModelLazyKt.navGraphViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.navigation.NavGraphViewModelLazyKt#navGraphViewModels(androidx.fragment.app.Fragment, int, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.navigation.NavGraphViewModelLazyKt.navGraphViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
diff --git a/navigation/navigation-fragment/api/current.txt b/navigation/navigation-fragment/api/current.txt
index 4a19205..e9cbc61 100644
--- a/navigation/navigation-fragment/api/current.txt
+++ b/navigation/navigation-fragment/api/current.txt
@@ -2,10 +2,10 @@
 package androidx.navigation {
 
   public final class NavGraphViewModelLazyKt {
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
   }
 
 }
@@ -46,9 +46,9 @@
 
   public final class DialogFragmentNavigatorDestinationBuilderKt {
     method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
     method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
   }
 
   public final class FragmentKt {
@@ -93,9 +93,9 @@
 
   public final class FragmentNavigatorDestinationBuilderKt {
     method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
     method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
   }
 
   public final class FragmentNavigatorExtrasKt {
diff --git a/navigation/navigation-fragment/api/public_plus_experimental_current.txt b/navigation/navigation-fragment/api/public_plus_experimental_current.txt
index 4a19205..e9cbc61 100644
--- a/navigation/navigation-fragment/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-fragment/api/public_plus_experimental_current.txt
@@ -2,10 +2,10 @@
 package androidx.navigation {
 
   public final class NavGraphViewModelLazyKt {
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
   }
 
 }
@@ -46,9 +46,9 @@
 
   public final class DialogFragmentNavigatorDestinationBuilderKt {
     method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
     method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
   }
 
   public final class FragmentKt {
@@ -93,9 +93,9 @@
 
   public final class FragmentNavigatorDestinationBuilderKt {
     method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
     method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
   }
 
   public final class FragmentNavigatorExtrasKt {
diff --git a/navigation/navigation-fragment/api/restricted_current.ignore b/navigation/navigation-fragment/api/restricted_current.ignore
new file mode 100644
index 0000000..f04bc2f
--- /dev/null
+++ b/navigation/navigation-fragment/api/restricted_current.ignore
@@ -0,0 +1,9 @@
+// Baseline format: 1.0
+ChangedType: androidx.navigation.NavGraphViewModelLazyKt#navGraphViewModels(androidx.fragment.app.Fragment, String, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.navigation.NavGraphViewModelLazyKt.navGraphViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.navigation.NavGraphViewModelLazyKt#navGraphViewModels(androidx.fragment.app.Fragment, String, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.navigation.NavGraphViewModelLazyKt.navGraphViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.navigation.NavGraphViewModelLazyKt#navGraphViewModels(androidx.fragment.app.Fragment, int, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.navigation.NavGraphViewModelLazyKt.navGraphViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
+ChangedType: androidx.navigation.NavGraphViewModelLazyKt#navGraphViewModels(androidx.fragment.app.Fragment, int, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>):
+    Method androidx.navigation.NavGraphViewModelLazyKt.navGraphViewModels has changed return type from kotlin.Lazy<? extends VM> to kotlin.Lazy<VM>
diff --git a/navigation/navigation-fragment/api/restricted_current.txt b/navigation/navigation-fragment/api/restricted_current.txt
index 4a19205..e9cbc61 100644
--- a/navigation/navigation-fragment/api/restricted_current.txt
+++ b/navigation/navigation-fragment/api/restricted_current.txt
@@ -2,10 +2,10 @@
 package androidx.navigation {
 
   public final class NavGraphViewModelLazyKt {
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
   }
 
 }
@@ -46,9 +46,9 @@
 
   public final class DialogFragmentNavigatorDestinationBuilderKt {
     method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
     method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
   }
 
   public final class FragmentKt {
@@ -93,9 +93,9 @@
 
   public final class FragmentNavigatorDestinationBuilderKt {
     method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
     method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
   }
 
   public final class FragmentNavigatorExtrasKt {
diff --git a/playground-common/playground.properties b/playground-common/playground.properties
index 32e09d6..25e89d5 100644
--- a/playground-common/playground.properties
+++ b/playground-common/playground.properties
@@ -26,5 +26,5 @@
 # Disable docs
 androidx.enableDocumentation=false
 androidx.playground.snapshotBuildId=10059712
-androidx.playground.metalavaBuildId=10097894
+androidx.playground.metalavaBuildId=10129644
 androidx.studio.type=playground
diff --git a/privacysandbox/ads/ads-adservices-java/src/androidTest/java/androidx/privacysandbox/ads/adservices/java/endtoend/measurement/MeasurementManagerTest.java b/privacysandbox/ads/ads-adservices-java/src/androidTest/java/androidx/privacysandbox/ads/adservices/java/endtoend/measurement/MeasurementManagerTest.java
index 79b940f0..fb8e44d 100644
--- a/privacysandbox/ads/ads-adservices-java/src/androidTest/java/androidx/privacysandbox/ads/adservices/java/endtoend/measurement/MeasurementManagerTest.java
+++ b/privacysandbox/ads/ads-adservices-java/src/androidTest/java/androidx/privacysandbox/ads/adservices/java/endtoend/measurement/MeasurementManagerTest.java
@@ -72,6 +72,7 @@
         // We need to turn the Consent Manager into debug mode
         mTestUtil.overrideConsentManagerDebugMode(true);
         mTestUtil.overrideMeasurementKillSwitches(true);
+        mTestUtil.overrideAdIdKillSwitch(true);
         mTestUtil.overrideDisableMeasurementEnrollmentCheck("1");
         mMeasurementManager =
                 MeasurementManagerFutures.from(ApplicationProvider.getApplicationContext());
@@ -87,6 +88,7 @@
         mTestUtil.overrideConsentManagerDebugMode(false);
         mTestUtil.resetOverrideDisableMeasurementEnrollmentCheck();
         mTestUtil.overrideMeasurementKillSwitches(false);
+        mTestUtil.overrideAdIdKillSwitch(false);
         mTestUtil.overrideDisableMeasurementEnrollmentCheck("0");
         // Cool-off rate limiter
         TimeUnit.SECONDS.sleep(1);
diff --git a/room/integration-tests/kotlintestapp/build.gradle b/room/integration-tests/kotlintestapp/build.gradle
index 8241224..1e0b08c 100644
--- a/room/integration-tests/kotlintestapp/build.gradle
+++ b/room/integration-tests/kotlintestapp/build.gradle
@@ -103,7 +103,6 @@
         exclude group: "com.android.support", module: "support-annotations"
         exclude module: "hamcrest-core"
     })
-    androidTestImplementation(libs.truth) // Kruth still lacks assertWithMessage
     androidTestImplementation(project(":internal-testutils-kmp"))
     androidTestImplementation(libs.kotlinTest)
     androidTestImplementation(project(":room:room-guava"))
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/ProvidedTypeConverterTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/ProvidedTypeConverterTest.kt
index 6698c89..df85ab8 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/ProvidedTypeConverterTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/ProvidedTypeConverterTest.kt
@@ -16,6 +16,8 @@
 package androidx.room.integration.kotlintestapp.test
 
 import android.content.Context
+import androidx.kruth.assertThat
+import androidx.kruth.assertWithMessage
 import androidx.room.Database
 import androidx.room.Entity
 import androidx.room.Insert
@@ -38,12 +40,10 @@
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
-import com.google.common.truth.Truth.assertThat
 import java.nio.ByteBuffer
 import java.util.Date
 import java.util.Objects
 import java.util.UUID
-import org.junit.Assert
 import org.junit.Test
 import org.junit.runner.RunWith
 
@@ -75,9 +75,9 @@
             val pet: Pet = TestUtil.createPet(3)
             pet.mName = "pet"
             db.petDao().insertOrReplace(pet)
-            Assert.fail("Show have thrown an IllegalArgumentException")
+            assertWithMessage("Show have thrown an IllegalArgumentException").fail()
         } catch (throwable: Throwable) {
-            assertThat(throwable).isInstanceOf(IllegalArgumentException::class.java)
+            assertThat(throwable).isInstanceOf<IllegalArgumentException>()
         }
     }
 
@@ -91,9 +91,9 @@
             val pet: Pet = TestUtil.createPet(3)
             pet.mName = "pet"
             db.petDao().insertOrReplace(pet)
-            Assert.fail("Show have thrown an IllegalArgumentException")
+            assertWithMessage("Show have thrown an IllegalArgumentException").fail()
         } catch (throwable: Throwable) {
-            assertThat(throwable).isInstanceOf(IllegalArgumentException::class.java)
+            assertThat(throwable).isInstanceOf<IllegalArgumentException>()
         }
     }
 
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx2PagingSourceTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx2PagingSourceTest.kt
index 77f2bb0..ee0a09f 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx2PagingSourceTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx2PagingSourceTest.kt
@@ -17,6 +17,7 @@
 package androidx.room.integration.kotlintestapp.test
 
 import androidx.kruth.assertThat
+import androidx.kruth.assertWithMessage
 import androidx.paging.Pager
 import androidx.paging.PagingState
 import androidx.paging.rxjava2.RxPagingSource
@@ -28,7 +29,6 @@
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth.assertWithMessage
 import io.reactivex.Single
 import kotlin.test.assertFalse
 import kotlin.test.assertTrue
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx3PagingSourceTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx3PagingSourceTest.kt
index cef0319..ecd722a 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx3PagingSourceTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx3PagingSourceTest.kt
@@ -17,6 +17,7 @@
 package androidx.room.integration.kotlintestapp.test
 
 import androidx.kruth.assertThat
+import androidx.kruth.assertWithMessage
 import androidx.paging.Pager
 import androidx.paging.PagingState
 import androidx.paging.rxjava3.RxPagingSource
@@ -28,7 +29,6 @@
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth.assertWithMessage
 import io.reactivex.rxjava3.core.Single
 import kotlin.test.assertFalse
 import kotlin.test.assertTrue
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendingQueryTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendingQueryTest.kt
index eb8cd5a..a80338c 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendingQueryTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendingQueryTest.kt
@@ -23,6 +23,7 @@
 import androidx.arch.core.executor.ArchTaskExecutor
 import androidx.arch.core.executor.TaskExecutor
 import androidx.kruth.assertThat
+import androidx.kruth.assertWithMessage
 import androidx.room.Room
 import androidx.room.RoomDatabase
 import androidx.room.integration.kotlintestapp.NewThreadDispatcher
@@ -37,7 +38,6 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.test.platform.app.InstrumentationRegistry
-import com.google.common.truth.Truth.assertWithMessage
 import java.io.IOException
 import java.util.concurrent.CountDownLatch
 import java.util.concurrent.ExecutorService
diff --git a/room/integration-tests/kotlintestapp/src/androidTestWithKspGenJava/java/androidx/room/integration/kotlintestapp/NullabilityAwareTypeConversionTest.kt b/room/integration-tests/kotlintestapp/src/androidTestWithKspGenJava/java/androidx/room/integration/kotlintestapp/NullabilityAwareTypeConversionTest.kt
index 2c551596..04ff446 100644
--- a/room/integration-tests/kotlintestapp/src/androidTestWithKspGenJava/java/androidx/room/integration/kotlintestapp/NullabilityAwareTypeConversionTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTestWithKspGenJava/java/androidx/room/integration/kotlintestapp/NullabilityAwareTypeConversionTest.kt
@@ -18,6 +18,7 @@
 
 import android.database.Cursor
 import androidx.kruth.assertThat
+import androidx.kruth.assertWithMessage
 import androidx.room.Dao
 import androidx.room.Database
 import androidx.room.Entity
@@ -33,7 +34,6 @@
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth.assertWithMessage
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/BooleanSubject.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/BooleanSubject.kt
index b083763..7352c54 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/BooleanSubject.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/BooleanSubject.kt
@@ -16,18 +16,19 @@
 
 package androidx.kruth
 
-import kotlin.test.assertTrue
-
 /**
  * Propositions for boolean subjects.
  */
-class BooleanSubject(actual: Boolean?) : Subject<Boolean>(actual) {
+class BooleanSubject internal constructor(
+    actual: Boolean?,
+    metadata: FailureMetadata = FailureMetadata(),
+) : Subject<Boolean>(actual = actual, metadata = metadata) {
 
     /**
      * Fails if the subject is false or `null`.
      */
     fun isFalse() {
-        assertTrue(
+        asserter.assertTrue(
             actual == false,
             "expected to be false, but was $actual"
         )
@@ -37,7 +38,7 @@
      * Fails if the subject is true or `null`.
      */
     fun isTrue() {
-        assertTrue(
+        asserter.assertTrue(
             actual == true,
             "expected to be true, but was $actual"
         )
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/ComparableSubject.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/ComparableSubject.kt
index 9d1ac4b..da5d8f3 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/ComparableSubject.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/ComparableSubject.kt
@@ -16,14 +16,15 @@
 
 package androidx.kruth
 
-import kotlin.test.fail
-
 /**
  * Propositions for [Comparable] typed subjects.
  *
  * @param T the type of the object being tested by this [ComparableSubject]
  */
-open class ComparableSubject<T : Comparable<T>> constructor(actual: T?) : Subject<T>(actual) {
+open class ComparableSubject<T : Comparable<T>> internal constructor(
+    actual: T?,
+    metadata: FailureMetadata = FailureMetadata(),
+) : Subject<T>(actual = actual, metadata = metadata) {
 
     /**
      * Checks that the subject is less than [other].
@@ -31,10 +32,11 @@
      * @throws NullPointerException if [actual] or [other] is `null`.
      */
     fun isLessThan(other: T?) {
-        if (actual == null || other == null) {
-            throw NullPointerException("Expected to be less than $other, but was $actual")
-        } else if (actual >= other) {
-            fail("Expected to be less than $other, but was $actual")
+        requireNonNull(actual) { "Expected to be less than $other, but was $actual" }
+        requireNonNull(other) { "Expected to be less than $other, but was $actual" }
+
+        if (actual >= other) {
+            asserter.fail("Expected to be less than $other, but was $actual")
         }
     }
 
@@ -47,7 +49,7 @@
         requireNonNull(actual) { "Expected to be at least $other, but was $actual" }
         requireNonNull(other) { "Expected to be at least $other, but was $actual" }
         if (actual < other) {
-            fail("Expected to be at least $other, but was $actual")
+            asserter.fail("Expected to be at least $other, but was $actual")
         }
     }
 }
\ No newline at end of file
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/FailingOrdered.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/FailingOrdered.kt
index 559e0e6..1c5fafb 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/FailingOrdered.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/FailingOrdered.kt
@@ -16,16 +16,15 @@
 
 package androidx.kruth
 
-import kotlin.test.fail
-
 /**
  * Always fails with the provided error message.
  */
 internal class FailingOrdered(
+    private val asserter: KruthAsserter,
     private val message: () -> String,
 ) : Ordered {
 
     override fun inOrder() {
-        fail(message())
+        asserter.fail(message())
     }
 }
\ No newline at end of file
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/FailureMetadata.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/FailureMetadata.kt
new file mode 100644
index 0000000..e966b77
--- /dev/null
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/FailureMetadata.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * 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 androidx.kruth
+
+internal data class FailureMetadata(
+    val messagesToPrepend: List<String> = emptyList(),
+) {
+
+    fun withMessage(messageToPrepend: String): FailureMetadata =
+        copy(messagesToPrepend = messagesToPrepend + messageToPrepend)
+
+    fun formatMessage(message: String? = null): String {
+        val messages = if (message == null) messagesToPrepend else messagesToPrepend + message
+
+        return when {
+            messages.isEmpty() -> message ?: ""
+            messages.size == 1 -> messages.single()
+            else -> messages.joinToString(separator = ". ", postfix = ".")
+        }
+    }
+}
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/IterableSubject.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/IterableSubject.kt
index 3a3c4f6..53662ec 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/IterableSubject.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/IterableSubject.kt
@@ -16,9 +16,6 @@
 
 package androidx.kruth
 
-import kotlin.test.assertEquals
-import kotlin.test.fail
-
 /**
  * Propositions for [Iterable] subjects.
  *
@@ -31,7 +28,10 @@
  * - Assertions may also require that the elements in the given [Iterable] implement
  * [Any.hashCode] correctly.
  */
-open class IterableSubject<T>(actual: Iterable<T>?) : Subject<Iterable<T>>(actual) {
+open class IterableSubject<T> internal constructor(
+    actual: Iterable<T>?,
+    metadata: FailureMetadata = FailureMetadata(),
+) : Subject<Iterable<T>>(actual = actual, metadata = metadata) {
 
     override fun isEqualTo(expected: Any?) {
         // method contract requires testing iterables for equality
@@ -57,7 +57,7 @@
         requireNonNull(actual) { "Expected to be empty, but was null" }
 
         if (!actual.isEmpty()) {
-            fail("Expected to be empty")
+            asserter.fail("Expected to be empty")
         }
     }
 
@@ -66,7 +66,7 @@
         requireNonNull(actual) { "Expected not to be empty, but was null" }
 
         if (actual.isEmpty()) {
-            fail("Expected to be not empty")
+            asserter.fail("Expected to be not empty")
         }
     }
 
@@ -75,7 +75,7 @@
         require(expectedSize >= 0) { "expectedSize must be >= 0, but was $expectedSize" }
         requireNonNull(actual) { "Expected to have size $expectedSize, but was null" }
 
-        assertEquals(expectedSize, actual.count())
+        asserter.assertEquals(expectedSize, actual.count())
     }
 
     /** Checks (with a side-effect failure) that the subject contains the supplied item. */
@@ -85,12 +85,12 @@
         if (element !in actual) {
             val matchingItems = actual.retainMatchingToString(listOf(element))
             if (matchingItems.isNotEmpty()) {
-                fail(
+                asserter.fail(
                     "Expected to contain $element, but did not. " +
                         "Though it did contain $matchingItems"
                 )
             } else {
-                fail("Expected to contain $element, but did not")
+                asserter.fail("Expected to contain $element, but did not")
             }
         }
     }
@@ -100,7 +100,7 @@
         requireNonNull(actual) { "Expected not to contain $element, but was null" }
 
         if (element in actual) {
-            fail("Expected not to contain $element")
+            asserter.fail("Expected not to contain $element")
         }
     }
 
@@ -111,7 +111,7 @@
         val duplicates = actual.groupBy { it }.values.filter { it.size > 1 }
 
         if (duplicates.isNotEmpty()) {
-            fail("Expected not to contain duplicates, but contained $duplicates")
+            asserter.fail("Expected not to contain duplicates, but contained $duplicates")
         }
     }
 
@@ -134,12 +134,12 @@
 
         val matchingItems = actual.retainMatchingToString(expected)
         if (matchingItems.isNotEmpty()) {
-            fail(
+            asserter.fail(
                 "Expected to contain any of $expected, but did not. " +
                     "Though it did contain $matchingItems"
             )
         } else {
-            fail("Expected to contain any of $expected, but did not")
+            asserter.fail("Expected to contain any of $expected, but did not")
         }
     }
 
@@ -192,7 +192,7 @@
         if (missing.isNotEmpty()) {
             val nearMissing = actualList.retainMatchingToString(missing)
 
-            fail(
+            asserter.fail(
                 """
                     Expected to contain at least $expected, but did not.
                     Missing $missing, though it did contain $nearMissing.
@@ -204,7 +204,7 @@
             return NoopOrdered
         }
 
-        return FailingOrdered {
+        return FailingOrdered(asserter) {
             buildString {
                 append("Required elements were all found, but order was wrong.")
                 append("Expected order: $expected.")
@@ -295,7 +295,9 @@
                      * values had multiple elements. Granted, Fuzzy Truth already does this, so maybe it's OK?
                      * But Fuzzy Truth doesn't (yet) make the mismatched value so prominent.
                      */
-                    fail("Expected $actualElement to be equal to $requiredElement, but was not")
+                    asserter.fail(
+                        "Expected $actualElement to be equal to $requiredElement, but was not"
+                    )
                 }
 
                 // Missing elements; elements that are not missing will be removed as we iterate.
@@ -328,7 +330,7 @@
                      * so return an object that will fail the test if the user calls inOrder().
                      */
 
-                    return FailingOrdered {
+                    return FailingOrdered(asserter) {
                         """
                              Contents match. Expected the order to also match, but was not.
                              Expected: $required.
@@ -337,7 +339,7 @@
                     }
                 }
 
-                fail(
+                asserter.fail(
                     """
                         Contents do not match.
                         Expected: $required.
@@ -356,7 +358,7 @@
         // extras. If the required iterator has elements, they're missing elements.
 
         if (actualIter.hasNext()) {
-            fail(
+            asserter.fail(
                 """
                     Contents do not match.
                     Expected: $required.
@@ -367,7 +369,7 @@
         }
 
         if (requiredIter.hasNext()) {
-            fail(
+            asserter.fail(
                 """
                     Contents do not match.
                     Expected: $required.
@@ -419,7 +421,7 @@
         val present = excluded.intersect(actual)
 
         if (present.isNotEmpty()) {
-            fail(
+            asserter.fail(
                 """
                     Expected not to contain any of $excluded but contained $present.
                     Actual: $actual.
@@ -515,7 +517,7 @@
             .zipWithNext(::Pair)
             .forEach { (a, b) ->
                 if (!predicate(a, b)) {
-                    fail(message(a, b))
+                    asserter.fail(message(a, b))
                 }
             }
     }
@@ -542,7 +544,7 @@
 
         val nonIterables = iterable.filterNot { it is Iterable<*> }
         if (nonIterables.isNotEmpty()) {
-            fail(
+            asserter.fail(
                 "The actual value is an Iterable, and you've written a test that compares it to " +
                     "some objects that are not Iterables. Did you instead mean to check " +
                     "whether its *contents* match any of the *contents* of the given values? " +
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Kruth.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Kruth.kt
index 89114369..d665351 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Kruth.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Kruth.kt
@@ -45,3 +45,11 @@
 
 fun <K, V> assertThat(actual: Map<K, V>?): MapSubject<K, V> =
     MapSubject(actual)
+
+/**
+ * Begins an assertion that, if it fails, will prepend the given message to the failure message.
+ */
+fun assertWithMessage(messageToPrepend: String): StandardSubjectBuilder =
+    StandardSubjectBuilder(
+        metadata = FailureMetadata(messagesToPrepend = listOf(messageToPrepend)),
+    )
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/KruthAsserter.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/KruthAsserter.kt
new file mode 100644
index 0000000..9964628
--- /dev/null
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/KruthAsserter.kt
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * 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 androidx.kruth
+
+import kotlin.contracts.ExperimentalContracts
+import kotlin.contracts.contract
+
+@OptIn(ExperimentalContracts::class)
+internal class KruthAsserter(
+    private val formatMessage: (String?) -> String?,
+) {
+
+    /**
+     * Fails the current test with the specified message and cause exception.
+     *
+     * @param message the message to report.
+     * @param cause the exception to set as the root cause of the reported failure.
+     */
+    fun fail(message: String? = null, cause: Throwable? = null): Nothing {
+        kotlin.test.fail(message = formatMessage(message), cause = cause)
+    }
+
+    /**
+     * Asserts that the specified value is `true`.
+     *
+     * @param message the message to report if the assertion fails.
+     */
+    fun assertTrue(actual: Boolean, message: String? = null) {
+        contract { returns() implies actual }
+        kotlin.test.assertTrue(actual = actual, message = formatMessage(message))
+    }
+
+    /**
+     * Asserts that the specified value is `false`.
+     *
+     * @param message the message to report if the assertion fails.
+     */
+    fun assertFalse(actual: Boolean, message: String? = null) {
+        contract { returns() implies !actual }
+        kotlin.test.assertFalse(actual = actual, message = formatMessage(message))
+    }
+
+    /**
+     * Asserts that the specified values are equal.
+     *
+     * @param message the message to report if the assertion fails.
+     */
+    fun assertEquals(expected: Any?, actual: Any?, message: String? = null) {
+        kotlin.test.assertEquals(
+            expected = expected,
+            actual = actual,
+            message = formatMessage(message),
+        )
+    }
+
+    /**
+     * Asserts that the specified values are not equal.
+     *
+     * @param message the message to report if the assertion fails.
+     */
+    fun assertNotEquals(illegal: Any?, actual: Any?, message: String? = null) {
+        kotlin.test.assertNotEquals(
+            illegal = illegal,
+            actual = actual,
+            message = formatMessage(message),
+        )
+    }
+
+    /**
+     * Asserts that the specified value is `null`.
+     *
+     * @param message the message to report if the assertion fails.
+     */
+    fun assertNull(actual: Any?, message: String? = null) {
+        contract { returns() implies (actual == null) }
+        kotlin.test.assertNull(actual = actual, message = formatMessage(message))
+    }
+
+    /**
+     * Asserts that the specified value is not `null`.
+     *
+     * @param message the message to report if the assertion fails.
+     */
+    fun <T : Any> assertNotNull(actual: T?, message: String? = null): T {
+        contract { returns() implies (actual != null) }
+        kotlin.test.assertNotNull(actual = actual, message = formatMessage(message))
+
+        return requireNonNull(actual)
+    }
+}
\ No newline at end of file
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/KruthExt.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/KruthExt.kt
index e44dc61..4e59342 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/KruthExt.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/KruthExt.kt
@@ -29,11 +29,11 @@
 // See: https://github.com/google/truth/issues/621
 inline fun <reified T : Throwable> assertThrows(block: () -> Unit): ThrowableSubject<T> {
     val e = assertFailsWith<T>(block = block)
-    return ThrowableSubject(e)
+    return assertThat(e)
 }
 
 inline fun <T : Throwable> assertThrows(exceptionClass: KClass<T>, block: () -> Unit):
     ThrowableSubject<T> {
     val e = assertFailsWith<T>(exceptionClass = exceptionClass, block = block)
-    return ThrowableSubject(e)
+    return assertThat(e)
 }
\ No newline at end of file
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/MapSubject.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/MapSubject.kt
index c5fdabd..8cc9fe9 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/MapSubject.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/MapSubject.kt
@@ -16,16 +16,14 @@
 
 package androidx.kruth
 
-import kotlin.test.fail
-
-class MapSubject<K, V>(actual: Map<K, V>?) : Subject<Map<K, V>>(actual) {
+class MapSubject<K, V> internal constructor(actual: Map<K, V>?) : Subject<Map<K, V>>(actual) {
 
     /** Fails if the map is not empty. */
     fun isEmpty() {
         requireNonNull(actual) { "Expected to be empty, but was null" }
 
         if (actual.isNotEmpty()) {
-            fail("Expected to be empty, but was $actual")
+            asserter.fail("Expected to be empty, but was $actual")
         }
     }
 
@@ -34,7 +32,7 @@
         requireNonNull(actual) { "Expected to contain $key, but was null" }
 
         if (!actual.containsKey(key)) {
-            fail("Expected to contain $key, but was ${actual.keys}")
+            asserter.fail("Expected to contain $key, but was ${actual.keys}")
         }
     }
 }
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/StandardSubjectBuilder.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/StandardSubjectBuilder.kt
new file mode 100644
index 0000000..85fe74e
--- /dev/null
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/StandardSubjectBuilder.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * 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 androidx.kruth
+
+/**
+ * In a fluent assertion chain, an object with which you can do any of the following:
+ *
+ * - Set an optional message with [withMessage].
+ * - For the types of [Subject] built into Kruth, directly specify the value under test
+ * with [withMessage].
+ */
+class StandardSubjectBuilder internal constructor(
+    private val metadata: FailureMetadata = FailureMetadata(),
+) {
+
+    /**
+     * Returns a new instance that will output the given message before the main failure message. If
+     * this method is called multiple times, the messages will appear in the order that they were
+     * specified.
+     */
+    fun withMessage(messageToPrepend: String): StandardSubjectBuilder =
+        StandardSubjectBuilder(metadata = metadata.withMessage(messageToPrepend = messageToPrepend))
+
+    fun <T> that(actual: T): Subject<T> =
+        Subject(actual = actual, metadata = metadata)
+
+    fun <T : Comparable<T>> that(actual: T?): ComparableSubject<T> =
+        ComparableSubject(actual = actual, metadata = metadata)
+
+    fun <T : Throwable> that(actual: T?): ThrowableSubject<T> =
+        ThrowableSubject(actual = actual, metadata = metadata)
+
+    fun that(actual: Boolean?): BooleanSubject =
+        BooleanSubject(actual = actual, metadata = metadata)
+
+    fun that(actual: String?): StringSubject =
+        StringSubject(actual = actual, metadata = metadata)
+
+    fun <T> that(actual: Iterable<T>?): IterableSubject<T> =
+        IterableSubject(actual = actual, metadata = metadata)
+
+    /**
+     * Reports a failure.
+     *
+     * To set a message, first call [withMessage] (or, more commonly, use the shortcut
+     * [assertWithMessage].
+     */
+    fun fail(): Nothing {
+        kotlin.test.fail(metadata.formatMessage())
+    }
+}
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/StringSubject.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/StringSubject.kt
index 69497e0..dd3e03a 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/StringSubject.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/StringSubject.kt
@@ -16,34 +16,41 @@
 
 package androidx.kruth
 
-import kotlin.test.assertContains
-import kotlin.test.assertNotNull
-import kotlin.test.fail
-
 /**
  * Propositions for string subjects.
  */
-class StringSubject(actual: String?) : ComparableSubject<String>(actual) {
+class StringSubject internal constructor(
+    actual: String?,
+    metadata: FailureMetadata = FailureMetadata(),
+) : ComparableSubject<String>(actual = actual, metadata = metadata) {
 
     /**
      * Fails if the string does not contain the given sequence.
      */
     fun contains(charSequence: CharSequence) {
-        assertNotNull(actual)
-        assertContains(actual, charSequence)
+        asserter.assertNotNull(actual)
+
+        asserter.assertTrue(
+            message = "Expected to contain \"$charSequence\", but was: \"$actual\"",
+            actual = actual.contains(charSequence),
+        )
     }
 
     /** Fails if the string does not have the given length.  */
     fun hasLength(expectedLength: Int) {
-        assertNotNull(actual)
-        assertThat(actual.length).isEqualTo(expectedLength)
+        asserter.assertNotNull(actual)
+
+        asserter.assertTrue(
+            message = "Expected to have length $expectedLength, but was: \"$actual\"",
+            actual = actual.length == expectedLength,
+        )
     }
 
     /** Fails if the string is not equal to the zero-length "empty string."  */
     fun isEmpty() {
-        assertNotNull(actual)
+        asserter.assertNotNull(actual)
         if (actual.isNotEmpty()) {
-            fail(
+            asserter.fail(
                 """
                     expected to be empty
                     | but was $actual
@@ -54,18 +61,18 @@
 
     /** Fails if the string is equal to the zero-length "empty string."  */
     fun isNotEmpty() {
-        assertNotNull(actual)
+        asserter.assertNotNull(actual)
         if (actual.isEmpty()) {
-            fail("expected not to be empty")
+            asserter.fail("expected not to be empty")
         }
     }
 
     /** Fails if the string contains the given sequence.  */
     fun doesNotContain(string: CharSequence) {
-        assertNotNull(actual, "expected a string that does not contain $string")
+        asserter.assertNotNull(actual, "expected a string that does not contain $string")
 
         if (actual.contains(string)) {
-            fail(
+            asserter.fail(
                 """
                     expected not to contain $string
                     | but was $actual
@@ -76,10 +83,10 @@
 
     /** Fails if the string does not start with the given string.  */
     fun startsWith(string: String) {
-        assertNotNull(actual, "expected a string that starts with $string")
+        asserter.assertNotNull(actual, "expected a string that starts with $string")
 
         if (!actual.startsWith(string)) {
-            fail(
+            asserter.fail(
                 """
                     expected to start with $string
                     | but was $actual
@@ -90,10 +97,10 @@
 
     /** Fails if the string does not end with the given string.  */
     fun endsWith(string: String) {
-        assertNotNull(actual, "expected a string that ends with $string")
+        asserter.assertNotNull(actual, "expected a string that ends with $string")
 
         if (!actual.endsWith(string)) {
-            fail(
+            asserter.fail(
                 """
                     expected to end with $string
                     | but was $actual
@@ -125,13 +132,17 @@
         fun isEqualTo(expected: String?) {
             when {
                 (actual == null) && (expected != null) ->
-                    fail("Expected a string equal to \"$expected\" (case is ignored), but was null")
+                    asserter.fail(
+                        "Expected a string equal to \"$expected\" (case is ignored), but was null"
+                    )
 
                 (expected == null) && (actual != null) ->
-                    fail("Expected a string that is null (null reference), but was \"$actual\"")
+                    asserter.fail(
+                        "Expected a string that is null (null reference), but was \"$actual\""
+                    )
 
                 !actual.equals(expected, ignoreCase = true) ->
-                    fail(
+                    asserter.fail(
                         "Expected a string equal to \"$expected\" (case is ignored), " +
                             "but was \"$actual\""
                     )
@@ -145,10 +156,12 @@
         fun isNotEqualTo(unexpected: String?) {
             when {
                 (actual == null) && (unexpected == null) ->
-                    fail("Expected a string not equal to null (null reference), but it was null")
+                    asserter.fail(
+                        "Expected a string not equal to null (null reference), but it was null"
+                    )
 
                 actual.equals(unexpected, ignoreCase = true) ->
-                    fail(
+                    asserter.fail(
                         "Expected a string not equal to \"$unexpected\" (case is ignored), " +
                             "but it was equal. Actual string: \"$actual\"."
                     )
@@ -161,29 +174,31 @@
 
             when {
                 actual == null ->
-                    fail(
+                    asserter.fail(
                         "Expected a string that contains \"$expected\" (case is ignored), " +
                             "but was null"
                     )
 
                 !actual.contains(expected, ignoreCase = true) ->
-                    fail("Expected to contain \"$expected\" (case is ignored), but was \"$actual\"")
+                    asserter.fail(
+                        "Expected to contain \"$expected\" (case is ignored), but was \"$actual\""
+                    )
             }
         }
 
         /** Fails if the string contains the given sequence (while ignoring case).  */
         fun doesNotContain(expected: CharSequence?) {
-            checkNotNull(expected)
+            requireNonNull(expected)
 
             when {
                 actual == null ->
-                    fail(
+                    asserter.fail(
                         "Expected a string that does not contain \"$expected\" " +
                             "(case is ignored), but was null"
                     )
 
                 actual.contains(expected, ignoreCase = true) ->
-                    fail(
+                    asserter.fail(
                         "Expected a string that does not contain \"$expected\" " +
                             "(case is ignored), but it was. Actual string: \"$actual\"."
                     )
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Subject.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Subject.kt
index c70574bc..12f59e3 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Subject.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Subject.kt
@@ -16,11 +16,7 @@
 
 package androidx.kruth
 
-import kotlin.test.assertFalse
-import kotlin.test.assertIs
-import kotlin.test.assertIsNot
-import kotlin.test.assertTrue
-import kotlin.test.fail
+import kotlin.reflect.typeOf
 
 // As opposed to Truth, which limits visibility on `actual` and the generic type, we purposely make
 // them visible in Kruth to allow for an easier time extending in Kotlin.
@@ -32,7 +28,12 @@
  *
  * To create a [Subject] instance, most users will call an [assertThat] method.
  */
-open class Subject<out T>(val actual: T?) {
+open class Subject<out T> internal constructor(
+    val actual: T?,
+    private val metadata: FailureMetadata = FailureMetadata(),
+) {
+
+    internal val asserter: KruthAsserter = KruthAsserter(formatMessage = metadata::formatMessage)
 
     /**
      *  Fails if the subject is not null.
@@ -83,7 +84,7 @@
     /** Fails if the subject is not the same instance as the given object.  */
     open fun isSameInstanceAs(expected: Any?) {
         if (actual !== expected) {
-            fail(
+            asserter.fail(
                 "Expected ${actual.toStringForAssert()} to be the same instance as " +
                     "${expected.toStringForAssert()}, but was not"
             )
@@ -93,26 +94,39 @@
     /** Fails if the subject is the same instance as the given object.  */
     open fun isNotSameInstanceAs(unexpected: Any?) {
         if (actual === unexpected) {
-            fail("Expected ${actual.toStringForAssert()} not to be specific instance, but it was")
+            asserter.fail(
+                "Expected ${actual.toStringForAssert()} not to be specific instance, but it was"
+            )
         }
     }
 
     /**
      * Fails if the subject is not an instance of the given class.
      */
-    inline fun <reified V> isInstanceOf() = assertIs<V>(actual)
+    inline fun <reified V> isInstanceOf() {
+        if (actual !is V) {
+            doFail("Expected $actual to be an instance of ${typeOf<V>()} but it was not")
+        }
+    }
 
     /**
      * Fails if the subject is an instance of the given class.
      **/
     inline fun <reified V> isNotInstanceOf() {
-        assertIsNot<V>(actual)
+        if (actual is V) {
+            doFail("Expected $actual to be not an instance of ${typeOf<V>()} but it was")
+        }
+    }
+
+    @PublishedApi
+    internal fun doFail(message: String) {
+        asserter.fail(message = message)
     }
 
     /** Fails unless the subject is equal to any element in the given [iterable]. */
     open fun isIn(iterable: Iterable<*>?) {
         if (actual !in requireNonNull(iterable)) {
-            fail("Expected $actual to be in $iterable, but was not")
+            asserter.fail("Expected $actual to be in $iterable, but was not")
         }
     }
 
@@ -124,7 +138,7 @@
     /** Fails if the subject is equal to any element in the given [iterable]. */
     open fun isNotIn(iterable: Iterable<*>?) {
         if (actual in requireNonNull(iterable)) {
-            fail("Expected $actual not to be in $iterable, but it was")
+            asserter.fail("Expected $actual not to be in $iterable, but it was")
         }
     }
 
@@ -132,67 +146,68 @@
     open fun isNoneOf(first: Any?, second: Any?, vararg rest: Any?) {
         isNotIn(listOf(first, second, *rest))
     }
-}
 
-private fun Any?.standardIsEqualTo(expected: Any?) {
-    assertTrue(
-        compareForEquality(expected),
-        "expected: ${expected.toStringForAssert()} but was: ${toStringForAssert()}",
-    )
-}
-
-private fun Any?.standardIsNotEqualTo(unexpected: Any?) {
-    assertFalse(
-        compareForEquality(unexpected),
-        "expected ${toStringForAssert()} not be equal to ${unexpected.toStringForAssert()}, " +
-            "but it was",
-    )
-}
-
-/**
- * Returns whether [this] equals [expected].
- *
- * The equality check follows the rules described on [Subject.isEqualTo].
- */
-private fun Any?.compareForEquality(expected: Any?): Boolean {
-    @Suppress("SuspiciousEqualsCombination") // Intentional for behaviour compatibility.
-    // This is migrated from Truth's equality helper, which has very specific logic for handling the
-    // magic "casting" they do between types. See:
-    // https://github.com/google/truth/blob/master/core/src/main/java/com/google/common/truth/Subject.java#L210
-    return when {
-        this == null && expected == null -> true
-        this == null || expected == null -> false
-        this is ByteArray && expected is ByteArray -> contentEquals(expected)
-        this is IntArray && expected is IntArray -> contentEquals(expected)
-        this is LongArray && expected is LongArray -> contentEquals(expected)
-        this is FloatArray && expected is FloatArray -> contentEquals(expected)
-        this is DoubleArray && expected is DoubleArray -> contentEquals(expected)
-        this is ShortArray && expected is ShortArray -> contentEquals(expected)
-        this is CharArray && expected is CharArray -> contentEquals(expected)
-        this is Array<*> && expected is Array<*> -> contentDeepEquals(expected)
-        isIntegralBoxedPrimitive() && expected.isIntegralBoxedPrimitive() -> {
-            integralValue() == expected.integralValue()
-        }
-        this is Double && expected is Double -> compareTo(expected) == 0
-        this is Float && expected is Float -> compareTo(expected) == 0
-        this is Double && expected is Int -> compareTo(expected.toDouble()) == 0
-        this is Float && expected is Int -> toDouble().compareTo(expected.toDouble()) == 0
-        else -> this === expected || this == expected
+    private fun Any?.standardIsEqualTo(expected: Any?) {
+        asserter.assertTrue(
+            compareForEquality(expected),
+            "expected: ${expected.toStringForAssert()} but was: ${toStringForAssert()}",
+        )
     }
-}
 
-private fun Any?.isIntegralBoxedPrimitive(): Boolean {
-    return this is Byte || this is Short || this is Char || this is Int || this is Long
-}
+    private fun Any?.standardIsNotEqualTo(unexpected: Any?) {
+        asserter.assertFalse(
+            compareForEquality(unexpected),
+            "expected ${toStringForAssert()} not be equal to ${unexpected.toStringForAssert()}, " +
+                "but it was",
+        )
+    }
 
-private fun Any?.integralValue(): Long = when (this) {
-    is Char -> code.toLong()
-    is Number -> toLong()
-    else -> throw AssertionError("$this must be either a Char or a Number.")
-}
+    /**
+     * Returns whether [this] equals [expected].
+     *
+     * The equality check follows the rules described on [Subject.isEqualTo].
+     */
+    private fun Any?.compareForEquality(expected: Any?): Boolean {
+        @Suppress("SuspiciousEqualsCombination") // Intentional for behaviour compatibility.
+        // This is migrated from Truth's equality helper, which has very specific logic for handling the
+        // magic "casting" they do between types. See:
+        // https://github.com/google/truth/blob/master/core/src/main/java/com/google/common/truth/Subject.java#L210
+        return when {
+            this == null && expected == null -> true
+            this == null || expected == null -> false
+            this is ByteArray && expected is ByteArray -> contentEquals(expected)
+            this is IntArray && expected is IntArray -> contentEquals(expected)
+            this is LongArray && expected is LongArray -> contentEquals(expected)
+            this is FloatArray && expected is FloatArray -> contentEquals(expected)
+            this is DoubleArray && expected is DoubleArray -> contentEquals(expected)
+            this is ShortArray && expected is ShortArray -> contentEquals(expected)
+            this is CharArray && expected is CharArray -> contentEquals(expected)
+            this is Array<*> && expected is Array<*> -> contentDeepEquals(expected)
+            isIntegralBoxedPrimitive() && expected.isIntegralBoxedPrimitive() -> {
+                integralValue() == expected.integralValue()
+            }
 
-private fun Any?.toStringForAssert(): String = when {
-    this == null -> toString()
-    isIntegralBoxedPrimitive() -> "${this::class.qualifiedName}<$this>"
-    else -> toString()
+            this is Double && expected is Double -> compareTo(expected) == 0
+            this is Float && expected is Float -> compareTo(expected) == 0
+            this is Double && expected is Int -> compareTo(expected.toDouble()) == 0
+            this is Float && expected is Int -> toDouble().compareTo(expected.toDouble()) == 0
+            else -> this === expected || this == expected
+        }
+    }
+
+    private fun Any?.isIntegralBoxedPrimitive(): Boolean {
+        return this is Byte || this is Short || this is Char || this is Int || this is Long
+    }
+
+    private fun Any?.integralValue(): Long = when (this) {
+        is Char -> code.toLong()
+        is Number -> toLong()
+        else -> asserter.fail("$this must be either a Char or a Number.")
+    }
+
+    private fun Any?.toStringForAssert(): String = when {
+        this == null -> toString()
+        isIntegralBoxedPrimitive() -> "${this::class.qualifiedName}<$this>"
+        else -> toString()
+    }
 }
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/ThrowableSubject.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/ThrowableSubject.kt
index 635b09a..2305ed4 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/ThrowableSubject.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/ThrowableSubject.kt
@@ -19,12 +19,15 @@
 /**
  * Propositions for [Throwable] subjects.
  */
-class ThrowableSubject<T : Throwable>(actual: T?) : Subject<T>(actual) {
+class ThrowableSubject<T : Throwable> internal constructor(
+    actual: T?,
+    private val metadata: FailureMetadata = FailureMetadata(),
+) : Subject<T>(actual = actual, metadata = metadata) {
 
     /**
      * Returns a [StringSubject] to make assertions about the throwable's message.
      */
     fun hasMessageThat(): StringSubject {
-        return StringSubject(actual?.message)
+        return StringSubject(actual = actual?.message, metadata = metadata)
     }
 }
\ No newline at end of file
diff --git a/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/AssertWithMessageTest.kt b/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/AssertWithMessageTest.kt
new file mode 100644
index 0000000..57e27d4
--- /dev/null
+++ b/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/AssertWithMessageTest.kt
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * 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 androidx.kruth
+
+import kotlin.test.Test
+import kotlin.test.assertContains
+import kotlin.test.assertNotNull
+import kotlin.test.assertTrue
+import kotlin.test.fail
+
+class AssertWithMessageTest {
+
+    private val assert = assertWithMessage("Msg1").withMessage("Msg2")
+
+    @Test
+    fun that_customObjects_errorContainsMessage() {
+        assertFailsWithMessage {
+            assert.that(Some(value = 0)).isEqualTo(Some(value = 1))
+        }
+    }
+
+    @Test
+    fun that_comparable_errorContainsMessage() {
+        assertFailsWithMessage {
+            assert.that(1).isLessThan(0)
+        }
+    }
+
+    @Test
+    fun that_throwable_errorContainsMessage() {
+        assertFailsWithMessage {
+            assert.that(Exception("Msg")).hasMessageThat().contains("NonExistentString")
+        }
+    }
+
+    @Test
+    fun that_boolean_errorContainsMessage() {
+        assertFailsWithMessage {
+            assert.that(false).isTrue()
+        }
+    }
+
+    @Test
+    fun that_string_errorContainsMessage() {
+        assertFailsWithMessage {
+            assert.that("Str").contains("NonExistentString")
+        }
+    }
+
+    @Test
+    fun that_iterable_errorContainsMessage() {
+        assertFailsWithMessage {
+            assert.that(listOf(1, 2, 3)).contains(4)
+        }
+    }
+
+    @Test
+    fun fail_errorContainsMessage() {
+        assertFailsWithMessage {
+            assert.fail()
+        }
+    }
+
+    private fun assertFailsWithMessage(block: () -> Unit) {
+        try {
+            block()
+            fail("Expected to fail but didn't")
+        } catch (e: AssertionError) {
+            val msg = assertNotNull(e.message)
+            assertTrue(msg.startsWith("Msg1"))
+            assertContains(msg, "Msg2")
+        }
+    }
+
+    private data class Some(val value: Int)
+}
\ No newline at end of file
diff --git a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FocusGroup.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FocusGroup.kt
index 98a9e38..715033a 100644
--- a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FocusGroup.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FocusGroup.kt
@@ -17,8 +17,8 @@
 package androidx.tv.integration.playground
 
 import android.annotation.SuppressLint
-import android.util.Log
-import androidx.compose.foundation.focusable
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.focusGroup
 import androidx.compose.foundation.layout.Box
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.DisposableEffect
@@ -34,6 +34,7 @@
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.focus.FocusDirection
 import androidx.compose.ui.focus.FocusRequester
+import androidx.compose.ui.focus.focusProperties
 import androidx.compose.ui.focus.focusRequester
 import androidx.compose.ui.focus.onFocusChanged
 import androidx.compose.ui.platform.LocalFocusManager
@@ -47,14 +48,13 @@
  * @param content the content that is present within the group and can use focus-group modifier
  * extensions.
  */
-@OptIn(ExperimentalComposeUiApi::class)
+@OptIn(ExperimentalComposeUiApi::class, ExperimentalFoundationApi::class)
 @ExperimentalTvFoundationApi
 @Composable
 fun FocusGroup(
     modifier: Modifier = Modifier,
     content: @Composable FocusGroupScope.() -> Unit
 ) {
-    val focusManager = LocalFocusManager.current
     val focusGroupKeyHash = currentCompositeKeyHash
 
     // TODO: Is this the intended way to call rememberSaveable
@@ -69,26 +69,19 @@
 
     Box(
         modifier = modifier
-            .onFocusChanged {
-                if (it.isFocused) {
-                    if (state.noRecordedState()) {
-                        focusManager.moveFocus(FocusDirection.Enter)
+            .focusProperties {
+                enter = {
+                    if (state.hasRecordedState()) {
+                        state.focusRequester
                     } else {
-                        if (state.focusRequester != FocusRequester.Default) {
-                            try {
-                                state.focusRequester.requestFocus()
-                            } catch (e: Exception) {
-                                Log.w("TvFocusGroup", "TvFocusGroup: Failed to request focus", e)
-                            }
-                        } else {
-                            focusManager.moveFocus(FocusDirection.Enter)
-                        }
+                        FocusRequester.Default
                     }
                 }
             }
-            .focusable(),
-        content = { FocusGroupScope(state).content() }
-    )
+            .focusGroup()
+    ) {
+        FocusGroupScope(state).content()
+    }
 }
 
 /**
@@ -178,6 +171,8 @@
         }
     }
 
+    internal fun hasRecordedState(): Boolean = !noRecordedState()
+
     internal fun noRecordedState(): Boolean =
         previousFocusedItemHash.value == null && focusRequester == FocusRequester.Default
 }
diff --git a/tv/integration-tests/presentation/src/main/java/androidx/tv/integration/presentation/App.kt b/tv/integration-tests/presentation/src/main/java/androidx/tv/integration/presentation/App.kt
index 4078a99..cb256fc 100644
--- a/tv/integration-tests/presentation/src/main/java/androidx/tv/integration/presentation/App.kt
+++ b/tv/integration-tests/presentation/src/main/java/androidx/tv/integration/presentation/App.kt
@@ -25,7 +25,6 @@
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.setValue
-import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.focus.FocusRequester
 import androidx.compose.ui.focus.focusRequester
@@ -42,103 +41,96 @@
 
 val pageColor = Color(0xff18171a)
 
-@OptIn(ExperimentalTvMaterial3Api::class, ExperimentalComposeUiApi::class)
+enum class Tabs(val displayName: String, val action: @Composable () -> Unit) {
+    Home("Home",
+        {
+            TvLazyColumn(
+                modifier = Modifier
+                    .fillMaxSize()
+                    .focusRequester(Home.fr)
+                    .background(pageColor)
+            ) {
+                item {
+                    FeaturedCarousel()
+                    AppSpacer(height = 50.dp)
+                }
+                movieCollections.forEach { movieCollection ->
+                    item {
+                        AppLazyRow(
+                            title = movieCollection.label,
+                            items = movieCollection.items,
+                            drawItem = { movie, _, modifier ->
+                                ImageCard(
+                                    movie,
+                                    aspectRatio = 2f / 3,
+                                    modifier = modifier
+                                )
+                            }
+                        )
+                        AppSpacer(height = 35.dp)
+                    }
+                }
+            }
+        }),
+    Movies("Movies",
+        {
+            TvLazyColumn(
+                modifier = Modifier
+                    .fillMaxSize()
+                    .background(pageColor)
+            ) {
+                item {
+                    AppImmersiveList(Modifier.focusRequester(Movies.fr))
+                }
+            }
+        }),
+    Shows("Shows", {
+        TvLazyColumn(
+            modifier = Modifier
+                .fillMaxSize()
+                .background(pageColor)
+        ) {
+            item {
+                ShowsGrid(
+                    Modifier.focusRequester(
+                        Shows.fr
+                    )
+                )
+            }
+        }
+    });
+
+    val fr: FocusRequester = FocusRequester()
+}
+
+@OptIn(ExperimentalTvMaterial3Api::class)
 @Composable
 fun App() {
-    val tabs = listOf("Home", "Movies", "Shows")
+    val tabs = remember { Tabs.values() }
     var selectedTabIndex by remember { mutableStateOf(0) }
-    val homePageFr = remember { FocusRequester() }
-    val moviesPageFr = remember { FocusRequester() }
-    val showsPageFr = remember { FocusRequester() }
+    val activeTab = remember(selectedTabIndex) {
+        tabs[selectedTabIndex]
+    }
 
     val tabRow = @Composable {
         AppTabRow(
-            tabs = tabs,
+            tabs = tabs.map { it.displayName },
             selectedTabIndex = selectedTabIndex,
             onSelectedTabIndexChange = { selectedTabIndex = it },
             modifier = Modifier
                 .zIndex(100f)
                 .onKeyEvent {
                     if (it.key.nativeKeyCode == Key.DirectionDown.nativeKeyCode) {
-                        val fr = when (selectedTabIndex) {
-                            0 -> homePageFr
-                            1 -> moviesPageFr
-                            2 -> showsPageFr
-                            else -> null
-                        }
-                        fr?.requestFocus()
+                        activeTab.fr.requestFocus()
                         true
                     } else
-                    false
+                        false
                 }
         )
     }
 
-    val homepage = @Composable {
-        TvLazyColumn(
-            modifier = Modifier
-                .fillMaxSize()
-                .focusRequester(homePageFr)
-                .background(pageColor)
-        ) {
-            item {
-                FeaturedCarousel(
-//                    modifier = Modifier.focusRequester(homePageFr)
-                )
-                AppSpacer(height = 50.dp)
-            }
-            movieCollections.forEach { movieCollection ->
-                item {
-                    AppLazyRow(
-                        title = movieCollection.label,
-                        items = movieCollection.items,
-                        drawItem = { movie, _, modifier ->
-                            ImageCard(
-                                movie,
-                                aspectRatio = 2f / 3,
-                                modifier = modifier
-                            )
-                        }
-                    )
-                    AppSpacer(height = 35.dp)
-                }
-            }
-        }
-    }
-
-    val moviesPage = @Composable {
-        TvLazyColumn(
-            modifier = Modifier
-                .fillMaxSize()
-                .background(pageColor)
-        ) {
-            item {
-                AppImmersiveList(Modifier.focusRequester(moviesPageFr))
-            }
-        }
-    }
-
-    val showsPage = @Composable {
-        TvLazyColumn(
-            modifier = Modifier
-                .fillMaxSize()
-                .background(pageColor)
-        ) {
-            item {
-                ShowsGrid(Modifier.focusRequester(showsPageFr))
-            }
-        }
-    }
-
     val activePage: MutableState<(@Composable () -> Unit)> = remember(selectedTabIndex) {
-        mutableStateOf(
-            when (selectedTabIndex) {
-                0 -> homepage
-                1 -> moviesPage
-                2 -> showsPage
-                else -> homepage
-            }
-        )
+        mutableStateOf(activeTab.action)
     }
 
     ModalNavigationDrawer(
diff --git a/wear/compose/compose-foundation/src/main/baseline-prof.txt b/wear/compose/compose-foundation/src/main/baseline-prof.txt
index dbdc6ab..e9cc78b2 100644
--- a/wear/compose/compose-foundation/src/main/baseline-prof.txt
+++ b/wear/compose/compose-foundation/src/main/baseline-prof.txt
@@ -3,10 +3,11 @@
 SPLandroidx/wear/compose/foundation/ArcPaddingValuesImpl;->**(**)**
 HSPLandroidx/wear/compose/foundation/BaseCurvedChildWrapper;->**(**)**
 HSPLandroidx/wear/compose/foundation/BasicCurvedTextKt**->**(**)**
+HPLandroidx/wear/compose/foundation/CompositionLocalsKt**->**(**)**
 HSPLandroidx/wear/compose/foundation/ContainerChild;->**(**)**
 Landroidx/wear/compose/foundation/CurvedAlignment;
 HSPLandroidx/wear/compose/foundation/CurvedChild;->**(**)**
-Landroidx/wear/compose/foundation/CurvedComposableChild;
+Landroidx/wear/compose/foundation/CurvedAlignment;
 HSPLandroidx/wear/compose/foundation/CurvedComposableKt**->**(**)**
 HSPLandroidx/wear/compose/foundation/CurvedDirection;->**(**)**
 HSPLandroidx/wear/compose/foundation/CurvedLayoutDirection;->**(**)**
@@ -28,3 +29,20 @@
 Landroidx/wear/compose/foundation/Element;
 HSPLandroidx/wear/compose/foundation/PaddingWrapper;->**(**)**
 HSPLandroidx/wear/compose/foundation/PartialLayoutInfo;->**(**)**
+PLandroidx/wear/compose/foundation/lazy/AutoCenteringParams;->**(**)**
+PLandroidx/wear/compose/foundation/lazy/CombinedPaddingValues;->**(**)**
+HPLandroidx/wear/compose/foundation/lazy/DefaultScalingLazyListItemInfo;->**(**)**
+HPLandroidx/wear/compose/foundation/lazy/DefaultScalingLazyListLayoutInfo;->**(**)**
+PLandroidx/wear/compose/foundation/lazy/DefaultScalingParams;->**(**)**
+PLandroidx/wear/compose/foundation/lazy/EmptyScalingLazyListLayoutInfo;->**(**)**
+HPLandroidx/wear/compose/foundation/lazy/ScaleAndAlpha;->**(**)**
+HPLandroidx/wear/compose/foundation/lazy/ScalingLazyColumnDefaults;->**(**)**
+HPLandroidx/wear/compose/foundation/lazy/ScalingLazyColumnKt**->**(**)**
+HPLandroidx/wear/compose/foundation/lazy/ScalingLazyColumnMeasureKt**->**(**)**
+PLandroidx/wear/compose/foundation/lazy/ScalingLazyColumnSnapFlingBehavior;->**(**)**
+PLandroidx/wear/compose/foundation/lazy/ScalingLazyListAnchorType;->**(**)**
+PLandroidx/wear/compose/foundation/lazy/ScalingLazyListItemScopeImpl;->**(**)**
+PLandroidx/wear/compose/foundation/lazy/ScalingLazyListScope;->**(**)**
+HPLandroidx/wear/compose/foundation/lazy/ScalingLazyListScopeImpl;->**(**)**
+HPLandroidx/wear/compose/foundation/lazy/ScalingLazyListState;->**(**)**
+HPLandroidx/wear/compose/foundation/lazy/ScalingLazyListStateKt**->**(**)**
diff --git a/wear/compose/compose-material/api/current.txt b/wear/compose/compose-material/api/current.txt
index 31f3e98..bcb102e 100644
--- a/wear/compose/compose-material/api/current.txt
+++ b/wear/compose/compose-material/api/current.txt
@@ -42,10 +42,10 @@
   }
 
   public final class ButtonKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void OutlinedButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void OutlinedCompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
   }
@@ -113,11 +113,11 @@
   }
 
   public final class ChipKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, androidx.wear.compose.material.ChipBorder border, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> label, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
     method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
-    method @Deprecated @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @Deprecated @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
     method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
     method @androidx.compose.runtime.Composable public static void OutlinedChip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
     method @androidx.compose.runtime.Composable public static void OutlinedCompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
@@ -299,9 +299,9 @@
 
   public final class PickerKt {
     method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,? extends kotlin.Unit> option);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,? extends kotlin.Unit> option);
     method @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.foundation.lazy.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
     method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.PickerState rememberPickerState(int initialNumberOfOptions, optional int initiallySelectedOption, optional boolean repeatItems);
   }
 
@@ -575,10 +575,10 @@
   }
 
   public final class StepperKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,? extends kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<? extends kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<? extends kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<? extends kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<? extends kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
   }
 
   public final class SwipeToDismissBoxDefaults {
@@ -634,9 +634,9 @@
   public final class TextKt {
     method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
     property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
   }
@@ -684,9 +684,9 @@
   }
 
   public final class ToggleButtonKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional int role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
   }
 
   @androidx.compose.runtime.Stable public interface ToggleChipColors {
@@ -800,17 +800,17 @@
   }
 
   public final class DialogKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? message, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,? extends kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, kotlin.jvm.functions.Function0<? extends kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<? extends kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? content);
     method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.lazy.ScalingLazyListScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
     method @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
   }
 
   public final class Dialog_androidKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
 }
diff --git a/wear/compose/compose-material/api/public_plus_experimental_current.txt b/wear/compose/compose-material/api/public_plus_experimental_current.txt
index ab31bbe..13baed6 100644
--- a/wear/compose/compose-material/api/public_plus_experimental_current.txt
+++ b/wear/compose/compose-material/api/public_plus_experimental_current.txt
@@ -42,10 +42,10 @@
   }
 
   public final class ButtonKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void OutlinedButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void OutlinedCompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
   }
@@ -114,11 +114,11 @@
   }
 
   public final class ChipKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, androidx.wear.compose.material.ChipBorder border, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> label, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
     method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
-    method @Deprecated @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @Deprecated @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
     method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
     method @androidx.compose.runtime.Composable public static void OutlinedChip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
     method @androidx.compose.runtime.Composable public static void OutlinedCompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
@@ -315,9 +315,9 @@
 
   public final class PickerKt {
     method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,? extends kotlin.Unit> option);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,? extends kotlin.Unit> option);
     method @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.foundation.lazy.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
     method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.PickerState rememberPickerState(int initialNumberOfOptions, optional int initiallySelectedOption, optional boolean repeatItems);
   }
 
@@ -626,10 +626,10 @@
   }
 
   public final class StepperKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,? extends kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<? extends kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<? extends kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<? extends kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<? extends kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
   }
 
   @androidx.compose.runtime.Immutable @androidx.wear.compose.material.ExperimentalWearMaterialApi public final class SwipeProgress<T> {
@@ -737,9 +737,9 @@
   public final class TextKt {
     method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
     property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
   }
@@ -791,9 +791,9 @@
   }
 
   public final class ToggleButtonKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional int role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
   }
 
   @androidx.compose.runtime.Stable public interface ToggleChipColors {
@@ -907,17 +907,17 @@
   }
 
   public final class DialogKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? message, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,? extends kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, kotlin.jvm.functions.Function0<? extends kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<? extends kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? content);
     method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.lazy.ScalingLazyListScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
     method @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
   }
 
   public final class Dialog_androidKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
 }
diff --git a/wear/compose/compose-material/api/restricted_current.txt b/wear/compose/compose-material/api/restricted_current.txt
index 31f3e98..bcb102e 100644
--- a/wear/compose/compose-material/api/restricted_current.txt
+++ b/wear/compose/compose-material/api/restricted_current.txt
@@ -42,10 +42,10 @@
   }
 
   public final class ButtonKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void OutlinedButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void OutlinedCompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
   }
@@ -113,11 +113,11 @@
   }
 
   public final class ChipKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, androidx.wear.compose.material.ChipBorder border, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> label, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
     method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
-    method @Deprecated @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @Deprecated @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
     method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
     method @androidx.compose.runtime.Composable public static void OutlinedChip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
     method @androidx.compose.runtime.Composable public static void OutlinedCompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
@@ -299,9 +299,9 @@
 
   public final class PickerKt {
     method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,? extends kotlin.Unit> option);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,? extends kotlin.Unit> option);
     method @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.foundation.lazy.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
     method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.PickerState rememberPickerState(int initialNumberOfOptions, optional int initiallySelectedOption, optional boolean repeatItems);
   }
 
@@ -575,10 +575,10 @@
   }
 
   public final class StepperKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,? extends kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<? extends kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<? extends kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<? extends kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<? extends kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
   }
 
   public final class SwipeToDismissBoxDefaults {
@@ -634,9 +634,9 @@
   public final class TextKt {
     method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
     method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
     property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
   }
@@ -684,9 +684,9 @@
   }
 
   public final class ToggleButtonKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional int role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
   }
 
   @androidx.compose.runtime.Stable public interface ToggleChipColors {
@@ -800,17 +800,17 @@
   }
 
   public final class DialogKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? message, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,? extends kotlin.Unit> content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, kotlin.jvm.functions.Function0<? extends kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<? extends kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? content);
     method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.lazy.ScalingLazyListScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
-    method @Deprecated @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
     method @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
   }
 
   public final class Dialog_androidKt {
-    method @Deprecated @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
 }
diff --git a/wear/compose/compose-material/src/main/baseline-prof.txt b/wear/compose/compose-material/src/main/baseline-prof.txt
index f2a2297..dd0b411 100644
--- a/wear/compose/compose-material/src/main/baseline-prof.txt
+++ b/wear/compose/compose-material/src/main/baseline-prof.txt
@@ -70,6 +70,7 @@
 HSPLandroidx/wear/compose/material/PositionIndicatorVisibility;->**(**)**
 PLandroidx/wear/compose/material/ProgressIndicatorDefaults;->**(**)**
 HPLandroidx/wear/compose/material/ProgressIndicatorKt**->**(**)**
+HSPLandroidx/wear/compose/material/ProvidersKt**->**(**)**
 Landroidx/wear/compose/material/R;
 Landroidx/wear/compose/material/RadioButtonColors;
 HSPLandroidx/wear/compose/material/RadioButtonDefaults;->**(**)**
@@ -77,7 +78,7 @@
 SPLandroidx/wear/compose/material/RangeDefaultsKt**->**(**)**
 SPLandroidx/wear/compose/material/RangeIcons;->**(**)**
 HSPLandroidx/wear/compose/material/ResistanceConfig;->**(**)**
-HSPLandroidx/wear/compose/material/Resources_androidKt**->**(**)**
+HSPLandroidx/wear/compose/material/ResourcesKt**->**(**)**
 HSPLandroidx/wear/compose/material/ScaffoldKt**->**(**)**
 HSPLandroidx/wear/compose/material/ScaleAndAlpha;->**(**)**
 HSPLandroidx/wear/compose/material/ScalingLazyColumnDefaults;->**(**)**
@@ -96,6 +97,7 @@
 HSPLandroidx/wear/compose/material/ScalingLazyListStateKt**->**(**)**
 Landroidx/wear/compose/material/ScalingParams;
 SPLandroidx/wear/compose/material/ScrollAwayKt**->**(**)**
+SPLandroidx/wear/compose/material/ScrollParams;->**(**)**
 HSPLandroidx/wear/compose/material/ScrollStateAdapter;->**(**)**
 HSPLandroidx/wear/compose/material/Shapes;->**(**)**
 HSPLandroidx/wear/compose/material/ShapesKt**->**(**)**
@@ -134,3 +136,8 @@
 SPLandroidx/wear/compose/material/VignettePosition;->**(**)**
 HPLandroidx/wear/compose/material/dialog/DialogDefaults;->**(**)**
 HPLandroidx/wear/compose/material/dialog/DialogKt**->**(**)**
+HSPLandroidx/wear/compose/materialcore/ButtonKt**->**(**)**
+HSPLandroidx/wear/compose/materialcore/CardKt**->**(**)**
+HSPLandroidx/wear/compose/materialcore/ChipKt**->**(**)**
+HSPLandroidx/wear/compose/materialcore/IconKt**->**(**)**
+HSPLandroidx/wear/compose/materialcore/TextKt**->**(**)**
diff --git a/wear/compose/compose-material3/integration-tests/build.gradle b/wear/compose/compose-material3/integration-tests/build.gradle
index b139b83..fcaddc1 100644
--- a/wear/compose/compose-material3/integration-tests/build.gradle
+++ b/wear/compose/compose-material3/integration-tests/build.gradle
@@ -35,6 +35,7 @@
 
     implementation(project(':wear:compose:compose-foundation'))
     implementation(project(':wear:compose:compose-material3'))
+    implementation(project(':wear:compose:compose-material3-samples'))
     implementation(project(':wear:compose:integration-tests:demos:common'))
 }
 
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ButtonDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ButtonDemo.kt
new file mode 100644
index 0000000..9817801
--- /dev/null
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ButtonDemo.kt
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * 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 androidx.wear.compose.material3.demos
+
+// Add Button demos here
\ No newline at end of file
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/WearMaterial3Demos.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/WearMaterial3Demos.kt
index 6492902..3379ab2 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/WearMaterial3Demos.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/WearMaterial3Demos.kt
@@ -16,16 +16,79 @@
 
 package androidx.wear.compose.material3.demos
 
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.height
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import androidx.wear.compose.integration.demos.common.Centralize
+import androidx.wear.compose.integration.demos.common.ComposableDemo
 import androidx.wear.compose.integration.demos.common.DemoCategory
+import androidx.wear.compose.material3.samples.ButtonSample
+import androidx.wear.compose.material3.samples.ChildButtonSample
+import androidx.wear.compose.material3.samples.FilledTonalButtonSample
+import androidx.wear.compose.material3.samples.FixedFontSize
+import androidx.wear.compose.material3.samples.OutlinedButtonSample
+import androidx.wear.compose.material3.samples.SimpleButtonSample
+import androidx.wear.compose.material3.samples.SimpleChildButtonSample
+import androidx.wear.compose.material3.samples.SimpleFilledTonalButtonSample
+import androidx.wear.compose.material3.samples.SimpleOutlinedButtonSample
 
 val WearMaterial3Demos = DemoCategory(
     "Material3",
     listOf(
         DemoCategory(
-            "ScrollAway",
+            "Button",
             listOf(
-                // Add Material 3 demos here
+                DemoCategory(
+                    "Samples",
+                    listOf(
+                        ComposableDemo("Button") {
+                            Centralize {
+                                SimpleButtonSample()
+                                Spacer(Modifier.height(4.dp))
+                                ButtonSample()
+                            }
+                        },
+                        ComposableDemo("FilledTonalButton") {
+                            Centralize {
+                                SimpleFilledTonalButtonSample()
+                                Spacer(Modifier.height(4.dp))
+                                FilledTonalButtonSample()
+                            }
+                        },
+                        ComposableDemo("OutlinedButton") {
+                            Centralize {
+                                SimpleOutlinedButtonSample()
+                                Spacer(Modifier.height(4.dp))
+                                OutlinedButtonSample()
+                            }
+                        },
+                        ComposableDemo("ChildButton") {
+                            Centralize {
+                                SimpleChildButtonSample()
+                                Spacer(Modifier.height(4.dp))
+                                ChildButtonSample()
+                            }
+                        },
+                    )
+                ),
+                DemoCategory(
+                    "Demos",
+                    listOf(
+                        // Add button demos here
+                    )
+                )
             )
         ),
+        DemoCategory(
+            "Theme",
+            listOf(
+                ComposableDemo(
+                    title = "Fixed Font Size",
+                    description =
+                    "Display1 font size not impacted by changes to user font selection",
+                ) { Centralize { FixedFontSize() } },
+            )
+        )
     )
 )
\ No newline at end of file
diff --git a/wear/compose/compose-material3/samples/build.gradle b/wear/compose/compose-material3/samples/build.gradle
index 05583d0..527c408 100644
--- a/wear/compose/compose-material3/samples/build.gradle
+++ b/wear/compose/compose-material3/samples/build.gradle
@@ -24,6 +24,12 @@
 }
 
 dependencies {
+    compileOnly(project(":annotation:annotation-sampled"))
+
+    implementation("androidx.compose.material:material-icons-core:1.4.2")
+    implementation(project(":compose:runtime:runtime"))
+    implementation(project(":wear:compose:compose-foundation"))
+    implementation(project(":wear:compose:compose-material3"))
 }
 
 android {
diff --git a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/ButtonSample.kt b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/ButtonSample.kt
new file mode 100644
index 0000000..955bd2b
--- /dev/null
+++ b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/ButtonSample.kt
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * 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 androidx.wear.compose.material3.samples
+
+import androidx.annotation.Sampled
+import androidx.compose.foundation.layout.size
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.wear.compose.material3.Button
+import androidx.wear.compose.material3.ButtonDefaults
+import androidx.wear.compose.material3.ChildButton
+import androidx.wear.compose.material3.FilledTonalButton
+import androidx.wear.compose.material3.Icon
+import androidx.wear.compose.material3.OutlinedButton
+import androidx.wear.compose.material3.Text
+
+@Sampled
+@Composable
+fun SimpleButtonSample() {
+    Button(
+        onClick = { /* Do something */ },
+        label = { Text("Simple Button") }
+    )
+}
+
+@Sampled
+@Composable
+fun ButtonSample() {
+    Button(
+        onClick = { /* Do something */ },
+        label = { Text("Button with icon") },
+        secondaryLabel = { Text("Secondary label") },
+        icon = {
+            Icon(
+                Icons.Filled.Favorite,
+                contentDescription = "Localized description",
+                modifier = Modifier.size(ButtonDefaults.IconSize)
+            )
+        }
+    )
+}
+
+@Sampled
+@Composable
+fun SimpleFilledTonalButtonSample() {
+    FilledTonalButton(
+        onClick = { /* Do something */ },
+        label = { Text("Simple FilledTonalButton") }
+    )
+}
+
+@Sampled
+@Composable
+fun FilledTonalButtonSample() {
+    FilledTonalButton(
+        onClick = { /* Do something */ },
+        label = { Text("FilledTonalButton") },
+        secondaryLabel = { Text("Secondary label") },
+        icon = {
+            Icon(
+                Icons.Filled.Favorite,
+                contentDescription = "Localized description",
+                modifier = Modifier.size(ButtonDefaults.IconSize)
+            )
+        }
+    )
+}
+
+@Sampled
+@Composable
+fun SimpleOutlinedButtonSample() {
+    OutlinedButton(
+        onClick = { /* Do something */ },
+        label = { Text("Simple OutlinedButton") }
+    )
+}
+
+@Sampled
+@Composable
+fun OutlinedButtonSample() {
+    OutlinedButton(
+        onClick = { /* Do something */ },
+        label = { Text("OutlinedButton") },
+        secondaryLabel = { Text("Secondary label") },
+        icon = {
+            Icon(
+                Icons.Filled.Favorite,
+                contentDescription = "Localized description",
+                modifier = Modifier.size(ButtonDefaults.IconSize)
+            )
+        }
+    )
+}
+
+@Sampled
+@Composable
+fun SimpleChildButtonSample() {
+    ChildButton(
+        onClick = { /* Do something */ },
+        label = { Text("Simple ChildButton") }
+    )
+}
+
+@Sampled
+@Composable
+fun ChildButtonSample() {
+    ChildButton(
+        onClick = { /* Do something */ },
+        label = { Text("ChildButton") },
+        secondaryLabel = { Text("Secondary label") },
+        icon = {
+            Icon(
+                Icons.Filled.Favorite,
+                contentDescription = "Localized description",
+                modifier = Modifier.size(ButtonDefaults.IconSize)
+            )
+        }
+    )
+}
diff --git a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/MaterialThemeSample.kt b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/MaterialThemeSample.kt
new file mode 100644
index 0000000..71069fd
--- /dev/null
+++ b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/MaterialThemeSample.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * 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 androidx.wear.compose.material3.samples
+
+import androidx.annotation.Sampled
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.unit.dp
+import androidx.wear.compose.material3.MaterialTheme
+import androidx.wear.compose.material3.Text
+
+@Sampled
+@Composable
+fun FixedFontSize() {
+    val typography = MaterialTheme.typography.copy(
+        displayLarge = MaterialTheme.typography.displayLarge.copy(
+            fontSize = with(LocalDensity.current) { 40.dp.toSp() }
+        )
+    )
+    MaterialTheme(typography = typography) {
+        Text(
+            text = "Fixed Font",
+            maxLines = 1,
+            style = MaterialTheme.typography.displayLarge,
+            color = MaterialTheme.colorScheme.onBackground,
+        )
+    }
+}
\ No newline at end of file
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Button.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Button.kt
index 4523dc5..4322d1f 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Button.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Button.kt
@@ -59,7 +59,10 @@
  *
  * Button can be enabled or disabled. A disabled button will not respond to click events.
  *
- * TODO(b/261838497) Add Material3 samples and UX guidance links
+ * TODO(b/261838497) Add Material3 UX guidance links
+ *
+ * Example of a [Button]:
+ * @sample androidx.wear.compose.material3.samples.SimpleButtonSample
  *
  * @param onClick Will be called when the user clicks the button
  * @param modifier Modifier to be applied to the button
@@ -130,7 +133,10 @@
  *
  * Button can be enabled or disabled. A disabled button will not respond to click events.
  *
- * TODO(b/261838497) Add Material3 samples and UX guidance links
+ * TODO(b/261838497) Add Material3 UX guidance links
+ *
+ * Example of a [FilledTonalButton]:
+ * @sample androidx.wear.compose.material3.samples.SimpleFilledTonalButtonSample
  *
  * @param onClick Will be called when the user clicks the button
  * @param modifier Modifier to be applied to the button
@@ -185,7 +191,10 @@
  *
  * Button can be enabled or disabled. A disabled button will not respond to click events.
  *
- * TODO(b/261838497) Add Material3 samples and UX guidance links
+ * TODO(b/261838497) Add Material3 UX guidance links
+ *
+ * Example of an [OutlinedButton]:
+ * @sample androidx.wear.compose.material3.samples.SimpleOutlinedButtonSample
  *
  * @param onClick Will be called when the user clicks the button
  * @param modifier Modifier to be applied to the button
@@ -240,7 +249,10 @@
  *
  * Button can be enabled or disabled. A disabled button will not respond to click events.
  *
- * TODO(b/261838497) Add Material3 samples and UX guidance links
+ * TODO(b/261838497) Add Material3 UX guidance links
+ *
+ * Example of a [ChildButton]:
+ * @sample androidx.wear.compose.material3.samples.SimpleChildButtonSample
  *
  * @param onClick Will be called when the user clicks the button
  * @param modifier Modifier to be applied to the button
@@ -299,7 +311,10 @@
  *
  * [Button] can be enabled or disabled. A disabled button will not respond to click events.
  *
- * TODO(b/261838497) Add Material3 samples and UX guidance links
+ * TODO(b/261838497) Add Material3 UX guidance links
+ *
+ * Example of a [Button] with an icon and secondary label:
+ * @sample androidx.wear.compose.material3.samples.ButtonSample
  *
  * @param onClick Will be called when the user clicks the button
  * @param modifier Modifier to be applied to the button
@@ -398,7 +413,10 @@
  * [FilledTonalButton] can be enabled or disabled. A disabled button will not respond to
  * click events.
  *
- * TODO(b/261838497) Add Material3 samples and UX guidance links
+ * TODO(b/261838497) Add Material3 UX guidance links
+ *
+ * Example of a [FilledTonalButton] with an icon and secondary label:
+ * @sample androidx.wear.compose.material3.samples.FilledTonalButtonSample
  *
  * @param onClick Will be called when the user clicks the button
  * @param modifier Modifier to be applied to the button
@@ -479,7 +497,10 @@
  *
  * [OutlinedButton] can be enabled or disabled. A disabled button will not respond to click events.
  *
- * TODO(b/261838497) Add Material3 samples and UX guidance links
+ * TODO(b/261838497) Add Material3 UX guidance links
+ *
+ * Example of an [OutlinedButton] with an icon and secondary label:
+ * @sample androidx.wear.compose.material3.samples.OutlinedButtonSample
  *
  * @param onClick Will be called when the user clicks the button
  * @param modifier Modifier to be applied to the button
@@ -559,7 +580,10 @@
  *
  * [Button] can be enabled or disabled. A disabled button will not respond to click events.
  *
- * TODO(b/261838497) Add Material3 samples and UX guidance links
+ * TODO(b/261838497) Add Material3 UX guidance links
+ *
+ * Example of a [ChildButton] with an icon and secondary label:
+ * @sample androidx.wear.compose.material3.samples.ChildButtonSample
  *
  * @param onClick Will be called when the user clicks the button
  * @param modifier Modifier to be applied to the button
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Typography.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Typography.kt
index 96e3f33..699e4e0 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Typography.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Typography.kt
@@ -29,8 +29,8 @@
  * The text styles in this typography are scaled according to the user's preferred font size in
  * the system settings. Larger font sizes can be fixed if necessary in order to avoid pressure on
  * screen space, because they are already sufficiently accessible.
- * Here is an example of fixing the font size for Display1:
- * @sample androidx.wear.compose.material.samples.FixedFontSize
+ * Here is an example of fixing the font size for DisplayLarge:
+ * @sample androidx.wear.compose.material3.samples.FixedFontSize
  *
  * TODO(b/273526150) Review documentation for typography, add examples for each size.
  * @property displayExtraLarge DisplayExtraLarge is the largest headline. Displays are the
diff --git a/wear/compose/integration-tests/demos/common/src/main/java/androidx/wear/compose/integration/demos/common/Demo.kt b/wear/compose/integration-tests/demos/common/src/main/java/androidx/wear/compose/integration/demos/common/Demo.kt
index 52a987a..56fa2c7 100644
--- a/wear/compose/integration-tests/demos/common/src/main/java/androidx/wear/compose/integration/demos/common/Demo.kt
+++ b/wear/compose/integration-tests/demos/common/src/main/java/androidx/wear/compose/integration/demos/common/Demo.kt
@@ -18,7 +18,13 @@
 
 import android.app.Activity
 import androidx.activity.ComponentActivity
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.ColumnScope
+import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
 import androidx.wear.compose.material.SwipeToDismissBoxState
 import kotlin.reflect.KClass
 
@@ -65,3 +71,13 @@
     description: String? = null,
     val content: @Composable (params: DemoParameters) -> Unit,
 ) : Demo(title, description)
+
+@Composable
+fun Centralize(modifier: Modifier = Modifier, content: @Composable ColumnScope.() -> Unit) {
+    Column(
+        modifier = modifier.fillMaxSize(),
+        verticalArrangement = Arrangement.Center,
+        horizontalAlignment = Alignment.CenterHorizontally,
+        content = content
+    )
+}
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoComponents.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoComponents.kt
index 4876340..c82c27b 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoComponents.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoComponents.kt
@@ -17,11 +17,7 @@
 package androidx.wear.compose.integration.demos
 
 import androidx.compose.foundation.Image
-import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.ColumnScope
-import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.requiredSize
 import androidx.compose.foundation.layout.size
@@ -114,16 +110,6 @@
     }
 }
 
-@Composable
-fun Centralize(modifier: Modifier = Modifier, content: @Composable ColumnScope.() -> Unit) {
-    Column(
-        modifier = modifier.fillMaxSize(),
-        verticalArrangement = Arrangement.Center,
-        horizontalAlignment = Alignment.CenterHorizontally,
-        content = content
-    )
-}
-
 public val DemoListTag = "DemoListTag"
 
 public val AlternatePrimaryColor1 = Color(0x7F, 0xCF, 0xFF)
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/MaterialDemos.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/MaterialDemos.kt
index 82d84b9..c4ab979 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/MaterialDemos.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/MaterialDemos.kt
@@ -27,6 +27,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.unit.dp
+import androidx.wear.compose.integration.demos.common.Centralize
 import androidx.wear.compose.integration.demos.common.ComposableDemo
 import androidx.wear.compose.integration.demos.common.DemoCategory
 import androidx.wear.compose.material.samples.AlertDialogSample
diff --git a/wear/protolayout/protolayout-material/api/current.txt b/wear/protolayout/protolayout-material/api/current.txt
index b76356d..f3cac87 100644
--- a/wear/protolayout/protolayout-material/api/current.txt
+++ b/wear/protolayout/protolayout-material/api/current.txt
@@ -116,6 +116,7 @@
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setEndAngle(float);
+    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(androidx.wear.protolayout.TypeBuilders.FloatProp);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStartAngle(float);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStrokeWidth(androidx.wear.protolayout.DimensionBuilders.DpProp);
diff --git a/wear/protolayout/protolayout-material/api/public_plus_experimental_current.txt b/wear/protolayout/protolayout-material/api/public_plus_experimental_current.txt
index 0f24435..64cf2bf 100644
--- a/wear/protolayout/protolayout-material/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout-material/api/public_plus_experimental_current.txt
@@ -116,6 +116,7 @@
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setEndAngle(float);
+    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(androidx.wear.protolayout.TypeBuilders.FloatProp);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStartAngle(float);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStrokeWidth(androidx.wear.protolayout.DimensionBuilders.DpProp);
diff --git a/wear/protolayout/protolayout-material/api/restricted_current.txt b/wear/protolayout/protolayout-material/api/restricted_current.txt
index b76356d..f3cac87 100644
--- a/wear/protolayout/protolayout-material/api/restricted_current.txt
+++ b/wear/protolayout/protolayout-material/api/restricted_current.txt
@@ -116,6 +116,7 @@
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setEndAngle(float);
+    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(androidx.wear.protolayout.TypeBuilders.FloatProp);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStartAngle(float);
     method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStrokeWidth(androidx.wear.protolayout.DimensionBuilders.DpProp);
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/CircularProgressIndicator.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/CircularProgressIndicator.java
index 0507a0d..74637d9 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/CircularProgressIndicator.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/CircularProgressIndicator.java
@@ -23,18 +23,23 @@
 import static androidx.wear.protolayout.material.Helper.checkTag;
 import static androidx.wear.protolayout.material.Helper.getMetadataTagName;
 import static androidx.wear.protolayout.material.Helper.getTagBytes;
+import static androidx.wear.protolayout.material.Helper.staticFloat;
 import static androidx.wear.protolayout.material.ProgressIndicatorDefaults.DEFAULT_COLORS;
 import static androidx.wear.protolayout.material.ProgressIndicatorDefaults.DEFAULT_END_ANGLE;
 import static androidx.wear.protolayout.material.ProgressIndicatorDefaults.DEFAULT_PADDING;
 import static androidx.wear.protolayout.material.ProgressIndicatorDefaults.DEFAULT_START_ANGLE;
 import static androidx.wear.protolayout.material.ProgressIndicatorDefaults.DEFAULT_STROKE_WIDTH;
 
+import static java.lang.Math.max;
+import static java.lang.Math.min;
+
 import androidx.annotation.Dimension;
 import androidx.annotation.FloatRange;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
+import androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint;
 import androidx.wear.protolayout.DimensionBuilders.DegreesProp;
 import androidx.wear.protolayout.DimensionBuilders.DpProp;
 import androidx.wear.protolayout.LayoutElementBuilders;
@@ -46,7 +51,10 @@
 import androidx.wear.protolayout.ModifiersBuilders.Modifiers;
 import androidx.wear.protolayout.ModifiersBuilders.Padding;
 import androidx.wear.protolayout.ModifiersBuilders.Semantics;
+import androidx.wear.protolayout.TypeBuilders.FloatProp;
 import androidx.wear.protolayout.TypeBuilders.StringProp;
+import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 
@@ -109,21 +117,37 @@
         @Nullable private StringProp mContentDescription;
         @NonNull private DegreesProp mStartAngle = degrees(DEFAULT_START_ANGLE);
         @NonNull private DegreesProp mEndAngle = degrees(DEFAULT_END_ANGLE);
-
-        @FloatRange(from = 0, to = 1)
-        private float mProgress = 0;
+        @NonNull private FloatProp mProgress = staticFloat(0f);
 
         /** Creates a builder for the {@link CircularProgressIndicator}. */
         public Builder() {}
 
         /**
-         * Sets the progress of the {@link CircularProgressIndicator}. Progress should be percentage
-         * from 0 to 1. Progress will be colored in {@link ProgressIndicatorColors#getTrackColor}.
-         * If not set, 0 will be used.
+         * Sets the progress of the {@link CircularProgressIndicator}. Progress ratio should be
+         * a value between 0 and 1. If not set, 0 will be used. Progress will be colored in {@link
+         * ProgressIndicatorColors#getIndicatorColor()}.
          */
         @NonNull
-        public Builder setProgress(@FloatRange(from = 0, to = 1) float progressPercentage) {
-            this.mProgress = progressPercentage;
+        public Builder setProgress(@FloatRange(from = 0, to = 1) float progressRatio) {
+            this.mProgress = staticFloat(progressRatio);
+            return this;
+        }
+
+        /**
+         * Sets the progress of the {@link CircularProgressIndicator}. If not set, static value
+         * provided using {@link #setProgress(float)} will be used, or 0. Progress will be colored
+         * in {@link ProgressIndicatorColors#getIndicatorColor()}.
+         *
+         * <p>While this field is statically accessible from 1.0, it's only bindable since version
+         * 1.2 and renderers supporting version 1.2 will use the dynamic value (if set).
+         *
+         * @param progressRatio The progress between 0 and 1. This field supports setting a
+         *     dynamic value. The static value of {@code progressRatio} will be considered as 0
+         *     if it's smaller than zero and as 1 if it's larger than one.
+         */
+        @NonNull
+        public Builder setProgress(@NonNull FloatProp progressRatio) {
+            this.mProgress = progressRatio;
             return this;
         }
 
@@ -230,6 +254,12 @@
                         new Semantics.Builder().setContentDescription(mContentDescription).build());
             }
 
+            ArcLine.Builder progressArcLineBuilder =
+                    new ArcLine.Builder()
+                            .setColor(mCircularProgressIndicatorColors.getIndicatorColor())
+                            .setThickness(mStrokeWidth);
+            applyCorrectValue(progressArcLineBuilder);
+
             Arc.Builder element =
                     new Arc.Builder()
                             .setAnchorType(LayoutElementBuilders.ARC_ANCHOR_START)
@@ -249,17 +279,36 @@
                                     new ArcSpacer.Builder()
                                             .setLength(degrees(360 - length.getValue()))
                                             .build())
-                            .addContent(
-                                    new ArcLine.Builder()
-                                            .setColor(
-                                                    mCircularProgressIndicatorColors
-                                                            .getIndicatorColor())
-                                            .setThickness(mStrokeWidth)
-                                            .setLength(degrees(mProgress * length.getValue()))
-                                            .build());
+                            .addContent(progressArcLineBuilder.build());
+
             return new CircularProgressIndicator(element.build());
         }
 
+        private void applyCorrectValue(ArcLine.Builder builder) {
+            float length = getLength().getValue();
+            float staticValue = mProgress.getValue();
+            staticValue = max(0, staticValue);
+            staticValue = min(1, staticValue);
+            if (mProgress.getDynamicValue() != null) {
+                DynamicFloat progressRatio = mProgress.getDynamicValue();
+                DynamicFloat dynamicLength =
+                        DynamicBuilders.dynamicFloatFromProto(
+                                        progressRatio.toDynamicFloatProto(),
+                                        mProgress.getFingerprint())
+                                .times(length);
+                builder.setLength(
+                        new DegreesProp.Builder(staticValue)
+                                .setDynamicValue(dynamicLength)
+                                .build());
+                builder.setLayoutConstraintsForDynamicLength(
+                        new AngularLayoutConstraint.Builder(length)
+                                .setAngularAlignment(LayoutElementBuilders.ANGULAR_ALIGNMENT_START)
+                                .build());
+            } else {
+                builder.setLength(degrees(staticValue * length));
+            }
+        }
+
         private void checkAngles() {
             if (mEndAngle.getValue() < mStartAngle.getValue()) {
                 throw new IllegalArgumentException("End angle must be bigger than start angle.");
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Helper.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Helper.java
index 3ec3360..c19ce74 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Helper.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Helper.java
@@ -28,6 +28,7 @@
 import androidx.wear.protolayout.ModifiersBuilders.ElementMetadata;
 import androidx.wear.protolayout.ModifiersBuilders.Modifiers;
 import androidx.wear.protolayout.TypeBuilders.StringProp;
+import androidx.wear.protolayout.TypeBuilders.FloatProp;
 
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
@@ -140,4 +141,12 @@
     public static StringProp staticString(@NonNull String value) {
         return new StringProp.Builder(value).build();
     }
+
+    /**
+     * Returns a {@link FloatProp} for the given float value.
+     */
+    @NonNull
+    public static FloatProp staticFloat(float staticValue) {
+        return new FloatProp.Builder(staticValue).build();
+    }
 }
diff --git a/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/CircularProgressIndicatorTest.java b/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/CircularProgressIndicatorTest.java
index d16ac99..b1c1843 100644
--- a/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/CircularProgressIndicatorTest.java
+++ b/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/CircularProgressIndicatorTest.java
@@ -34,7 +34,9 @@
 import androidx.wear.protolayout.LayoutElementBuilders.Column;
 import androidx.wear.protolayout.ModifiersBuilders.ElementMetadata;
 import androidx.wear.protolayout.ModifiersBuilders.Modifiers;
+import androidx.wear.protolayout.TypeBuilders;
 import androidx.wear.protolayout.TypeBuilders.StringProp;
+import androidx.wear.protolayout.expression.DynamicBuilders;
 import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString;
 
 import org.junit.Test;
@@ -60,6 +62,24 @@
     }
 
     @Test
+    public void testProgressIndicatorWithDynamicProgress() {
+        TypeBuilders.FloatProp floatProp = new TypeBuilders.FloatProp.Builder(0)
+                .setDynamicValue(DynamicBuilders.DynamicFloat.constant(0.5f)).build();
+        CircularProgressIndicator circularProgressIndicator =
+                new CircularProgressIndicator.Builder()
+                        .setProgress(floatProp)
+                        .build();
+
+        Box box = new Box.Builder().addContent(circularProgressIndicator).build();
+
+        CircularProgressIndicator newCpi =
+                CircularProgressIndicator.fromLayoutElement(box.getContents().get(0));
+
+        assertThat(newCpi).isNotNull();
+        assertThat(newCpi.getProgress().toProto().hasDynamicValue()).isTrue();
+        assertThat(newCpi.getProgress().toProto().hasValueForLayout()).isTrue();
+    }
+    @Test
     public void testProgressIndicatorCustom() {
         float progress = 0.25f;
         StringProp contentDescription = new StringProp.Builder("60 degrees progress").build();
diff --git a/wear/protolayout/protolayout/api/current.txt b/wear/protolayout/protolayout/api/current.txt
index c9ee11e..1e5bb08 100644
--- a/wear/protolayout/protolayout/api/current.txt
+++ b/wear/protolayout/protolayout/api/current.txt
@@ -14,10 +14,6 @@
   public static interface ActionBuilders.Action {
   }
 
-  public static interface ActionBuilders.Action.Builder {
-    method public androidx.wear.protolayout.ActionBuilders.Action build();
-  }
-
   public static final class ActionBuilders.AndroidActivity {
     method public String getClassName();
     method public java.util.Map<java.lang.String!,androidx.wear.protolayout.ActionBuilders.AndroidExtra!> getKeyToExtraMapping();
@@ -93,7 +89,7 @@
     method public androidx.wear.protolayout.ActionBuilders.AndroidActivity? getAndroidActivity();
   }
 
-  public static final class ActionBuilders.LaunchAction.Builder implements androidx.wear.protolayout.ActionBuilders.Action.Builder {
+  public static final class ActionBuilders.LaunchAction.Builder {
     ctor public ActionBuilders.LaunchAction.Builder();
     method public androidx.wear.protolayout.ActionBuilders.LaunchAction build();
     method public androidx.wear.protolayout.ActionBuilders.LaunchAction.Builder setAndroidActivity(androidx.wear.protolayout.ActionBuilders.AndroidActivity);
@@ -103,7 +99,7 @@
     method public androidx.wear.protolayout.StateBuilders.State? getRequestState();
   }
 
-  public static final class ActionBuilders.LoadAction.Builder implements androidx.wear.protolayout.ActionBuilders.Action.Builder {
+  public static final class ActionBuilders.LoadAction.Builder {
     ctor public ActionBuilders.LoadAction.Builder();
     method public androidx.wear.protolayout.ActionBuilders.LoadAction build();
     method public androidx.wear.protolayout.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.protolayout.StateBuilders.State);
@@ -517,18 +513,18 @@
     method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setWeight(int);
   }
 
-  public static class LayoutElementBuilders.FontStyles {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+  @Deprecated public static class LayoutElementBuilders.FontStyles {
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
   }
 
   public static final class LayoutElementBuilders.FontWeightProp {
@@ -1047,12 +1043,15 @@
   }
 
   public static final class TypeBuilders.FloatProp {
+    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
     method public float getValue();
   }
 
   public static final class TypeBuilders.FloatProp.Builder {
-    ctor public TypeBuilders.FloatProp.Builder();
+    ctor @Deprecated public TypeBuilders.FloatProp.Builder();
+    ctor public TypeBuilders.FloatProp.Builder(float);
     method public androidx.wear.protolayout.TypeBuilders.FloatProp build();
+    method public androidx.wear.protolayout.TypeBuilders.FloatProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
     method public androidx.wear.protolayout.TypeBuilders.FloatProp.Builder setValue(float);
   }
 
diff --git a/wear/protolayout/protolayout/api/public_plus_experimental_current.txt b/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
index 5a5f0f7..87a1ce4 100644
--- a/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
@@ -14,10 +14,6 @@
   public static interface ActionBuilders.Action {
   }
 
-  public static interface ActionBuilders.Action.Builder {
-    method public androidx.wear.protolayout.ActionBuilders.Action build();
-  }
-
   public static final class ActionBuilders.AndroidActivity {
     method public String getClassName();
     method public java.util.Map<java.lang.String!,androidx.wear.protolayout.ActionBuilders.AndroidExtra!> getKeyToExtraMapping();
@@ -93,7 +89,7 @@
     method public androidx.wear.protolayout.ActionBuilders.AndroidActivity? getAndroidActivity();
   }
 
-  public static final class ActionBuilders.LaunchAction.Builder implements androidx.wear.protolayout.ActionBuilders.Action.Builder {
+  public static final class ActionBuilders.LaunchAction.Builder {
     ctor public ActionBuilders.LaunchAction.Builder();
     method public androidx.wear.protolayout.ActionBuilders.LaunchAction build();
     method public androidx.wear.protolayout.ActionBuilders.LaunchAction.Builder setAndroidActivity(androidx.wear.protolayout.ActionBuilders.AndroidActivity);
@@ -103,7 +99,7 @@
     method public androidx.wear.protolayout.StateBuilders.State? getRequestState();
   }
 
-  public static final class ActionBuilders.LoadAction.Builder implements androidx.wear.protolayout.ActionBuilders.Action.Builder {
+  public static final class ActionBuilders.LoadAction.Builder {
     ctor public ActionBuilders.LoadAction.Builder();
     method public androidx.wear.protolayout.ActionBuilders.LoadAction build();
     method public androidx.wear.protolayout.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.protolayout.StateBuilders.State);
@@ -563,18 +559,18 @@
     method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setWeight(int);
   }
 
-  public static class LayoutElementBuilders.FontStyles {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+  @Deprecated public static class LayoutElementBuilders.FontStyles {
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
   }
 
   @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static final class LayoutElementBuilders.FontVariantProp {
@@ -1265,12 +1261,15 @@
   }
 
   public static final class TypeBuilders.FloatProp {
+    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
     method public float getValue();
   }
 
   public static final class TypeBuilders.FloatProp.Builder {
-    ctor public TypeBuilders.FloatProp.Builder();
+    ctor @Deprecated public TypeBuilders.FloatProp.Builder();
+    ctor public TypeBuilders.FloatProp.Builder(float);
     method public androidx.wear.protolayout.TypeBuilders.FloatProp build();
+    method public androidx.wear.protolayout.TypeBuilders.FloatProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
     method public androidx.wear.protolayout.TypeBuilders.FloatProp.Builder setValue(float);
   }
 
diff --git a/wear/protolayout/protolayout/api/restricted_current.txt b/wear/protolayout/protolayout/api/restricted_current.txt
index c9ee11e..1e5bb08 100644
--- a/wear/protolayout/protolayout/api/restricted_current.txt
+++ b/wear/protolayout/protolayout/api/restricted_current.txt
@@ -14,10 +14,6 @@
   public static interface ActionBuilders.Action {
   }
 
-  public static interface ActionBuilders.Action.Builder {
-    method public androidx.wear.protolayout.ActionBuilders.Action build();
-  }
-
   public static final class ActionBuilders.AndroidActivity {
     method public String getClassName();
     method public java.util.Map<java.lang.String!,androidx.wear.protolayout.ActionBuilders.AndroidExtra!> getKeyToExtraMapping();
@@ -93,7 +89,7 @@
     method public androidx.wear.protolayout.ActionBuilders.AndroidActivity? getAndroidActivity();
   }
 
-  public static final class ActionBuilders.LaunchAction.Builder implements androidx.wear.protolayout.ActionBuilders.Action.Builder {
+  public static final class ActionBuilders.LaunchAction.Builder {
     ctor public ActionBuilders.LaunchAction.Builder();
     method public androidx.wear.protolayout.ActionBuilders.LaunchAction build();
     method public androidx.wear.protolayout.ActionBuilders.LaunchAction.Builder setAndroidActivity(androidx.wear.protolayout.ActionBuilders.AndroidActivity);
@@ -103,7 +99,7 @@
     method public androidx.wear.protolayout.StateBuilders.State? getRequestState();
   }
 
-  public static final class ActionBuilders.LoadAction.Builder implements androidx.wear.protolayout.ActionBuilders.Action.Builder {
+  public static final class ActionBuilders.LoadAction.Builder {
     ctor public ActionBuilders.LoadAction.Builder();
     method public androidx.wear.protolayout.ActionBuilders.LoadAction build();
     method public androidx.wear.protolayout.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.protolayout.StateBuilders.State);
@@ -517,18 +513,18 @@
     method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setWeight(int);
   }
 
-  public static class LayoutElementBuilders.FontStyles {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+  @Deprecated public static class LayoutElementBuilders.FontStyles {
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
+    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
   }
 
   public static final class LayoutElementBuilders.FontWeightProp {
@@ -1047,12 +1043,15 @@
   }
 
   public static final class TypeBuilders.FloatProp {
+    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
     method public float getValue();
   }
 
   public static final class TypeBuilders.FloatProp.Builder {
-    ctor public TypeBuilders.FloatProp.Builder();
+    ctor @Deprecated public TypeBuilders.FloatProp.Builder();
+    ctor public TypeBuilders.FloatProp.Builder(float);
     method public androidx.wear.protolayout.TypeBuilders.FloatProp build();
+    method public androidx.wear.protolayout.TypeBuilders.FloatProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
     method public androidx.wear.protolayout.TypeBuilders.FloatProp.Builder setValue(float);
   }
 
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ActionBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ActionBuilders.java
index 92da2cf..2007acc 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ActionBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ActionBuilders.java
@@ -844,6 +844,7 @@
 
     /** Builder to create {@link Action} objects. */
     @SuppressLint("StaticFinalBuilder")
+    @RestrictTo(Scope.LIBRARY_GROUP)
     interface Builder {
 
       /** Builds an instance with values accumulated in this Builder. */
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/DimensionBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/DimensionBuilders.java
index e84479a..55627c1 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/DimensionBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/DimensionBuilders.java
@@ -967,10 +967,16 @@
              * children have equal weight. Where applicable, the width or height of the element is
              * proportional to the sum of the weights of its siblings.
              *
+             * <p>Note that this field only supports static values.
+             *
              * @since 1.2
              */
             @NonNull
             public Builder setLayoutWeight(@NonNull FloatProp layoutWeight) {
+                if (layoutWeight.getDynamicValue() != null) {
+                    throw new IllegalArgumentException(
+                            "setLayoutWeight doesn't support dynamic values.");
+                }
                 mImpl.setLayoutWeight(layoutWeight.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(layoutWeight.getFingerprint()).aggregateValueAsInt());
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java
index e3570fd..43fe141 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java
@@ -1661,9 +1661,17 @@
             /**
              * Sets the resource_id of the image to render. This must exist in the supplied resource
              * bundle.
+             *
+             * <p>Note that this field only supports static values.
+             *
+             * @since 1.0
              */
             @NonNull
             public Builder setResourceId(@NonNull StringProp resourceId) {
+                if (resourceId.getDynamicValue() != null) {
+                    throw new IllegalArgumentException(
+                            "setResourceId doesn't support dynamic values.");
+                }
                 mImpl.setResourceId(resourceId.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(resourceId.getFingerprint()).aggregateValueAsInt());
@@ -2493,9 +2501,17 @@
             /**
              * Sets the resource_id of the image to render. This must exist in the supplied resource
              * bundle.
+             *
+             * <p>Note that this field only supports static values.
+             *
+             * @since 1.0
              */
             @NonNull
             public Builder setResourceId(@NonNull StringProp resourceId) {
+                if (resourceId.getDynamicValue() != null) {
+                    throw new IllegalArgumentException(
+                            "setResourceId doesn't support dynamic values.");
+                }
                 mImpl.setResourceId(resourceId.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(resourceId.getFingerprint()).aggregateValueAsInt());
@@ -2511,18 +2527,36 @@
                 return this;
             }
 
-            /** Sets the width of this image. If not defined, the image will not be rendered. */
+            /**
+             * Sets the width of this image. If not defined, the image will not be rendered.
+             *
+             * <p>Note that this field only supports static values.
+             *
+             * @since 1.0
+             */
             @NonNull
             public Builder setWidth(@NonNull DpProp width) {
+                if (width.getDynamicValue() != null) {
+                    throw new IllegalArgumentException("setWidth doesn't support dynamic values.");
+                }
                 mImpl.setWidth(width.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(width.getFingerprint()).aggregateValueAsInt());
                 return this;
             }
 
-            /** Sets the height of this image. If not defined, the image will not be rendered. */
+            /**
+             * Sets the height of this image. If not defined, the image will not be rendered.
+             *
+             * <p>Note that this field only supports static values.
+             *
+             * @since 1.0
+             */
             @NonNull
             public Builder setHeight(@NonNull DpProp height) {
+                if (height.getDynamicValue() != null) {
+                    throw new IllegalArgumentException("setHeight doesn't support dynamic values.");
+                }
                 mImpl.setHeight(height.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(height.getFingerprint()).aggregateValueAsInt());
@@ -3639,8 +3673,7 @@
             @NonNull
             public Builder setText(@NonNull StringProp text) {
                 if (text.getDynamicValue() != null) {
-                    throw new IllegalArgumentException(
-                            "ArcText.Builder.setText doesn't support dynamic values.");
+                    throw new IllegalArgumentException("setText doesn't support dynamic values.");
                 }
                 mImpl.setText(text.toProto());
                 mFingerprint.recordPropertyUpdate(
@@ -3849,9 +3882,19 @@
                 return this;
             }
 
-            /** Sets the thickness of this line. If not defined, defaults to 0. */
+            /**
+             * Sets the thickness of this line. If not defined, defaults to 0.
+             *
+             * <p>Note that this field only supports static values.
+             *
+             * @since 1.0
+             */
             @NonNull
             public Builder setThickness(@NonNull DpProp thickness) {
+                if (thickness.getDynamicValue() != null) {
+                    throw new IllegalArgumentException(
+                            "setThickness doesn't support dynamic values.");
+                }
                 mImpl.setThickness(thickness.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(thickness.getFingerprint()).aggregateValueAsInt());
@@ -4087,18 +4130,37 @@
 
             public Builder() {}
 
-            /** Sets the length of this spacer, in degrees. If not defined, defaults to 0. */
+            /**
+             * Sets the length of this spacer, in degrees. If not defined, defaults to 0.
+             *
+             * <p>Note that this field only supports static values.
+             *
+             * @since 1.0
+             */
             @NonNull
             public Builder setLength(@NonNull DegreesProp length) {
+                if (length.getDynamicValue() != null) {
+                    throw new IllegalArgumentException("setLength doesn't support dynamic values.");
+                }
                 mImpl.setLength(length.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(length.getFingerprint()).aggregateValueAsInt());
                 return this;
             }
 
-            /** Sets the thickness of this spacer, in DP. If not defined, defaults to 0. */
+            /**
+             * Sets the thickness of this spacer, in DP. If not defined, defaults to 0.
+             *
+             * <p>Note that this field only supports static values.
+             *
+             * @since 1.0
+             */
             @NonNull
             public Builder setThickness(@NonNull DpProp thickness) {
+                if (thickness.getDynamicValue() != null) {
+                    throw new IllegalArgumentException(
+                            "setThickness doesn't support dynamic values.");
+                }
                 mImpl.setThickness(thickness.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(thickness.getFingerprint()).aggregateValueAsInt());
@@ -5064,7 +5126,14 @@
         }
     }
 
-    /** Font styles, currently set up to match Wear's font styling. */
+    /**
+     * Font styles, currently set up to match Wear's font styling.
+     *
+     * @deprecated Use {@link androidx.wear.protolayout.material.Typography} on Material {@link
+     *     androidx.wear.protolayout.material.Text} (highly recommended) or make your own
+     *     {@link FontStyle}.
+     */
+    @Deprecated
     public static class FontStyles {
         private static final int LARGE_SCREEN_WIDTH_DP = 210;
 
@@ -5074,85 +5143,151 @@
             return deviceParameters.getScreenWidthDp() >= LARGE_SCREEN_WIDTH_DP;
         }
 
-        /** Font style for large display text. */
+        /**
+         * Font style for large display text.
+         *
+         * @deprecated Use {@link androidx.wear.protolayout.material.Typography#TYPOGRAPHY_DISPLAY1}
+         *     on Material {@link androidx.wear.protolayout.material.Text}.
+         */
         @NonNull
+        @Deprecated
         public static FontStyle.Builder display1(@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 54 : 50));
         }
 
-        /** Font style for medium display text. */
+        /**
+         * Font style for medium display text.
+         *
+         * @deprecated Use {@link androidx.wear.protolayout.material.Typography#TYPOGRAPHY_DISPLAY2}
+         *     on Material {@link androidx.wear.protolayout.material.Text}.
+         */
         @NonNull
+        @Deprecated
         public static FontStyle.Builder display2(@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 44 : 40));
         }
 
-        /** Font style for small display text. */
+        /**
+         * Font style for small display text.
+         *
+         * @deprecated Use {@link androidx.wear.protolayout.material.Typography#TYPOGRAPHY_DISPLAY3}
+         *     on Material {@link androidx.wear.protolayout.material.Text}.
+         */
         @NonNull
+        @Deprecated
         public static FontStyle.Builder display3(@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 34 : 30));
         }
 
-        /** Font style for large title text. */
+        /**
+         * Font style for large title text.
+         *
+         * @deprecated Use {@link androidx.wear.protolayout.material.Typography#TYPOGRAPHY_TITLE1}
+         *     on Material {@link androidx.wear.protolayout.material.Text}.
+         */
         @NonNull
+        @Deprecated
         public static FontStyle.Builder title1(@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 26 : 24));
         }
 
-        /** Font style for medium title text. */
+        /**
+         * Font style for medium title text.
+         *
+         * @deprecated Use {@link androidx.wear.protolayout.material.Typography#TYPOGRAPHY_TITLE2}
+         *     on Material {@link androidx.wear.protolayout.material.Text}.
+         */
         @NonNull
+        @Deprecated
         public static FontStyle.Builder title2(@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 22 : 20));
         }
 
-        /** Font style for small title text. */
+        /**
+         * Font style for small title text.
+         *
+         * @deprecated Use {@link androidx.wear.protolayout.material.Typography#TYPOGRAPHY_TITLE3}
+         *     on Material {@link androidx.wear.protolayout.material.Text}.
+         */
         @NonNull
+        @Deprecated
         public static FontStyle.Builder title3(@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 18 : 16));
         }
 
-        /** Font style for large body text. */
+        /**
+         * Font style for large body text.
+         *
+         * @deprecated Use {@link androidx.wear.protolayout.material.Typography#TYPOGRAPHY_BODY1} on
+         *     Material {@link androidx.wear.protolayout.material.Text}.
+         */
         @NonNull
+        @Deprecated
         public static FontStyle.Builder body1(@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 18 : 16));
         }
 
-        /** Font style for medium body text. */
+        /**
+         * Font style for medium body text.
+         *
+         * @deprecated Use {@link androidx.wear.protolayout.material.Typography#TYPOGRAPHY_BODY2}
+         *     on Material {@link androidx.wear.protolayout.material.Text}.
+         */
         @NonNull
+        @Deprecated
         public static FontStyle.Builder body2(@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 16 : 14));
         }
 
-        /** Font style for button text. */
+        /**
+         * Font style for button text.
+         *
+         * @deprecated Use {@link androidx.wear.protolayout.material.Typography#TYPOGRAPHY_BUTTON}
+         *     on Material {@link androidx.wear.protolayout.material.Text}.
+         */
         @NonNull
+        @Deprecated
         public static FontStyle.Builder button(@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 16 : 14));
         }
 
-        /** Font style for large caption text. */
+        /**
+         * Font style for large caption text.
+         *
+         * @deprecated Use {@link androidx.wear.protolayout.material.Typography#TYPOGRAPHY_CAPTION1}
+         *     on Material {@link androidx.wear.protolayout.material.Text}.
+         */
         @NonNull
+        @Deprecated
         public static FontStyle.Builder caption1(@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 16 : 14));
         }
 
-        /** Font style for medium caption text. */
+        /**
+         * Font style for medium caption text.
+         *
+         * @deprecated Use {@link androidx.wear.protolayout.material.Typography#TYPOGRAPHY_CAPTION2}
+         *     on Material {@link androidx.wear.protolayout.material.Text}.
+         */
         @NonNull
+        @Deprecated
         public static FontStyle.Builder caption2(@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 14 : 12));
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ModifiersBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ModifiersBuilders.java
index 3e8ae62..4ee3ffe 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ModifiersBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ModifiersBuilders.java
@@ -725,10 +725,15 @@
              * Sets the padding on the end of the content, depending on the layout direction, in DP
              * and the value of "rtl_aware".
              *
+             * <p>Note that this field only supports static values.
+             *
              * @since 1.0
              */
             @NonNull
             public Builder setEnd(@NonNull DpProp end) {
+                if (end.getDynamicValue() != null) {
+                    throw new IllegalArgumentException("setEnd doesn't support dynamic values.");
+                }
                 mImpl.setEnd(end.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(end.getFingerprint()).aggregateValueAsInt());
@@ -739,10 +744,15 @@
              * Sets the padding on the start of the content, depending on the layout direction, in
              * DP and the value of "rtl_aware".
              *
+             * <p>Note that this field only supports static values.
+             *
              * @since 1.0
              */
             @NonNull
             public Builder setStart(@NonNull DpProp start) {
+                if (start.getDynamicValue() != null) {
+                    throw new IllegalArgumentException("setStart doesn't support dynamic values.");
+                }
                 mImpl.setStart(start.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(start.getFingerprint()).aggregateValueAsInt());
@@ -752,10 +762,15 @@
             /**
              * Sets the padding at the top, in DP.
              *
+             * <p>Note that this field only supports static values.
+             *
              * @since 1.0
              */
             @NonNull
             public Builder setTop(@NonNull DpProp top) {
+                if (top.getDynamicValue() != null) {
+                    throw new IllegalArgumentException("setTop doesn't support dynamic values.");
+                }
                 mImpl.setTop(top.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(top.getFingerprint()).aggregateValueAsInt());
@@ -765,10 +780,15 @@
             /**
              * Sets the padding at the bottom, in DP.
              *
+             * <p>Note that this field only supports static values.
+             *
              * @since 1.0
              */
             @NonNull
             public Builder setBottom(@NonNull DpProp bottom) {
+                if (bottom.getDynamicValue() != null) {
+                    throw new IllegalArgumentException("setBottom doesn't support dynamic values.");
+                }
                 mImpl.setBottom(bottom.toProto());
                 mFingerprint.recordPropertyUpdate(
                         4, checkNotNull(bottom.getFingerprint()).aggregateValueAsInt());
@@ -781,6 +801,8 @@
              * side of the container if the device is using an RTL locale). If false, start/end will
              * always map to left/right, accordingly.
              *
+             * <p>Note that this field only supports static values.
+             *
              * @since 1.0
              */
             @NonNull
@@ -903,10 +925,15 @@
             /**
              * Sets the width of the border, in DP.
              *
+             * <p>Note that this field only supports static values.
+             *
              * @since 1.0
              */
             @NonNull
             public Builder setWidth(@NonNull DpProp width) {
+                if (width.getDynamicValue() != null) {
+                    throw new IllegalArgumentException("setWidth doesn't support dynamic values.");
+                }
                 mImpl.setWidth(width.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(width.getFingerprint()).aggregateValueAsInt());
@@ -1002,10 +1029,15 @@
             /**
              * Sets the radius of the corner in DP.
              *
+             * <p>Note that this field only supports static values.
+             *
              * @since 1.0
              */
             @NonNull
             public Builder setRadius(@NonNull DpProp radius) {
+                if (radius.getDynamicValue() != null) {
+                    throw new IllegalArgumentException("setRadius doesn't support dynamic values.");
+                }
                 mImpl.setRadius(radius.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(radius.getFingerprint()).aggregateValueAsInt());
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TypeBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TypeBuilders.java
index 03c202a..15cf3aa 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TypeBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TypeBuilders.java
@@ -25,6 +25,7 @@
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.AlignmentProto;
 import androidx.wear.protolayout.proto.TypesProto;
@@ -165,7 +166,7 @@
             /**
              * Creates an instance of {@link Builder}.
              *
-             * @deprecated use {@link Builder(String)}
+             * @deprecated use {@link #Builder(String)}
              */
             @Deprecated
             public Builder() {}
@@ -344,6 +345,20 @@
             return mImpl.getValue();
         }
 
+        /**
+         * Gets the dynamic value.
+         *
+         * @since 1.2
+         */
+        @Nullable
+        public DynamicFloat getDynamicValue() {
+            if (mImpl.hasDynamicValue()) {
+                return DynamicBuilders.dynamicFloatFromProto(mImpl.getDynamicValue());
+            } else {
+                return null;
+            }
+        }
+
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
         @Nullable
@@ -366,10 +381,27 @@
             private final TypesProto.FloatProp.Builder mImpl = TypesProto.FloatProp.newBuilder();
             private final Fingerprint mFingerprint = new Fingerprint(-641088370);
 
+            /**
+             * Creates an instance of {@link Builder}.
+             *
+             * @deprecated use {@link #Builder(float)}
+             */
+            @Deprecated
             public Builder() {}
 
             /**
-             * Sets the value.
+             * Creates an instance of {@link Builder}.
+             *
+             * @param staticValue the static value.
+             */
+            public Builder(float staticValue) {
+                setValue(staticValue);
+            }
+
+            /**
+             * Sets the static value. If a dynamic value is also set and the renderer supports
+             * dynamic values for the corresponding field, this static value will be ignored.
+             * If the static value is not specified, Zero will be used instead. 
              *
              * @since 1.0
              */
@@ -380,9 +412,37 @@
                 return this;
             }
 
-            /** Builds an instance from accumulated values. */
+            /**
+             * Sets the dynamic value. Note that when setting this value, the static value is still
+             * required to be set (with either {@link #Builder(float)} or {@link #setValue(float)})
+             * to support older renderers that only read the static value. If {@code dynamicValue
+             * } has an invalid result, the provided static value will be used
+             * instead.
+             *
+             * @since 1.2
+             */
+            @NonNull
+            public Builder setDynamicValue(@NonNull DynamicFloat dynamicValue) {
+                mImpl.setDynamicValue(dynamicValue.toDynamicFloatProto());
+                mFingerprint.recordPropertyUpdate(
+                        2, checkNotNull(dynamicValue.getFingerprint()).aggregateValueAsInt());
+                return this;
+            }
+
+            /**
+             * Builds an instance from accumulated values.
+             *
+             * @throws IllegalStateException if a dynamic value is set using
+             *                               {@link #setDynamicValue(DynamicFloat)} but neither
+             *                               {@link #Builder(float)} nor
+             *                               {@link #setValue(float)} is used to provide a static
+             *                               value.
+             */
             @NonNull
             public FloatProp build() {
+                if(mImpl.hasDynamicValue() && !mImpl.hasValue()){
+                    throw new IllegalStateException("Static value is missing.");
+                }
                 return new FloatProp(mImpl.build(), mFingerprint);
             }
         }
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DimensionBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DimensionBuildersTest.java
index cdee4a9..6264fe2 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DimensionBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DimensionBuildersTest.java
@@ -91,7 +91,7 @@
     @Test
     public void expandedLayoutWeight() {
         TypeBuilders.FloatProp layoutWeight =
-                new TypeBuilders.FloatProp.Builder().setValue(3.14f).build();
+                new TypeBuilders.FloatProp.Builder(3.14f).build();
         DimensionBuilders.ContainerDimension dimensionProp =
                 new DimensionBuilders.ExpandedDimensionProp.Builder()
                         .setLayoutWeight(layoutWeight)
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TypeBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TypeBuildersTest.java
index 3245f32..ac1bc3f 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TypeBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TypeBuildersTest.java
@@ -35,6 +35,16 @@
                                     new AppDataKey<>(STATE_KEY)))
                     .build();
 
+    private static final TypeBuilders.FloatProp FLOAT_PROP =
+            new TypeBuilders.FloatProp.Builder(12f)
+                    .setDynamicValue(DynamicBuilders.DynamicFloat.from(new AppDataKey<>(STATE_KEY)))
+                    .build();
+    @SuppressWarnings("deprecation")
+    private static final TypeBuilders.FloatProp.Builder FLOAT_PROP_WITHOUT_STATIC_VALUE =
+            new TypeBuilders.FloatProp.Builder()
+                    .setDynamicValue(
+                            DynamicBuilders.DynamicFloat.from(new AppDataKey<>(STATE_KEY)));
+
     @SuppressWarnings("deprecation")
     private static final TypeBuilders.StringProp.Builder STRING_PROP_BUILDER_WITHOUT_STATIC_VALUE =
             new TypeBuilders.StringProp.Builder()
@@ -69,4 +79,18 @@
                 IllegalArgumentException.class,
                 () -> new LayoutElementBuilders.ArcText.Builder().setText(STRING_PROP));
     }
+
+    @Test
+    public void floatPropSupportsDynamicFloat() {
+        TypesProto.FloatProp floatPropProto = FLOAT_PROP.toProto();
+
+        assertThat(floatPropProto.getValue()).isEqualTo(FLOAT_PROP.getValue());
+        assertThat(floatPropProto.getDynamicValue().getStateSource().getSourceKey())
+                .isEqualTo(STATE_KEY);
+    }
+
+    @Test
+    public void floatProp_withoutStaticValue_throws() {
+        assertThrows(IllegalStateException.class, FLOAT_PROP_WITHOUT_STATIC_VALUE::build);
+    }
 }
diff --git a/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceService.kt b/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceService.kt
index 8adf5fc..434be3409 100644
--- a/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceService.kt
+++ b/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceService.kt
@@ -611,8 +611,8 @@
                 require(complicationData.validTimeRange == TimeRange.ALWAYS) {
                     "Preview data should have time range set to ALWAYS."
                 }
-                require(!complicationData.asWireComplicationData().hasExpression()) {
-                    "Preview data must not have expressions."
+                require(!complicationData.asWireComplicationData().hasDynamicValues()) {
+                    "Preview data must not have dynamic values."
                 }
             }
             return complicationData?.asWireComplicationData()
diff --git a/wear/watchface/watchface-complications-data-source/src/test/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceServiceTest.kt b/wear/watchface/watchface-complications-data-source/src/test/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceServiceTest.kt
index 720ff58..eb60b48 100644
--- a/wear/watchface/watchface-complications-data-source/src/test/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceServiceTest.kt
+++ b/wear/watchface/watchface-complications-data-source/src/test/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceServiceTest.kt
@@ -29,8 +29,8 @@
 import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString
 import androidx.wear.watchface.complications.data.ComplicationData
 import androidx.wear.watchface.complications.data.ComplicationText
-import androidx.wear.watchface.complications.data.ComplicationTextExpression
 import androidx.wear.watchface.complications.data.ComplicationType
+import androidx.wear.watchface.complications.data.DynamicComplicationText
 import androidx.wear.watchface.complications.data.LongTextComplicationData
 import androidx.wear.watchface.complications.data.PlainComplicationText
 import androidx.wear.watchface.complications.data.RangedValueComplicationData
@@ -283,10 +283,11 @@
             .isEqualTo("hello preview")
     }
 
-    enum class DataWithExpressionScenario(val data: ComplicationData) {
+    enum class DataWithDynamicValueScenario(val data: ComplicationData) {
         RANGED_VALUE(
             RangedValueComplicationData.Builder(
-                    valueExpression = DynamicFloat.constant(1f),
+                    dynamicValue = DynamicFloat.constant(1f),
+                    fallbackValue = 0f,
                     min = 0f,
                     max = 10f,
                     contentDescription = ComplicationText.EMPTY
@@ -296,7 +297,7 @@
         ),
         LONG_TEXT(
             LongTextComplicationData.Builder(
-                    text = ComplicationTextExpression(DynamicString.constant("Long Text")),
+                    text = DynamicComplicationText(DynamicString.constant("Long Text"), "fallback"),
                     contentDescription = ComplicationText.EMPTY
                 )
                 .build()
@@ -306,12 +307,13 @@
                     text = ComplicationText.EMPTY,
                     contentDescription = ComplicationText.EMPTY
                 )
-                .setTitle(ComplicationTextExpression(DynamicString.constant("Long Title")))
+                .setTitle(DynamicComplicationText(DynamicString.constant("Long Title"), "fallback"))
                 .build()
         ),
         SHORT_TEXT(
             ShortTextComplicationData.Builder(
-                    text = ComplicationTextExpression(DynamicString.constant("Short Text")),
+                    text =
+                        DynamicComplicationText(DynamicString.constant("Short Text"), "fallback"),
                     contentDescription = ComplicationText.EMPTY
                 )
                 .build()
@@ -321,22 +323,24 @@
                     text = ComplicationText.EMPTY,
                     contentDescription = ComplicationText.EMPTY
                 )
-                .setTitle(ComplicationTextExpression(DynamicString.constant("Short Title")))
+                .setTitle(
+                    DynamicComplicationText(DynamicString.constant("Short Title"), "fallback")
+                )
                 .build()
         ),
         CONTENT_DESCRIPTION(
             LongTextComplicationData.Builder(
                     text = ComplicationText.EMPTY,
                     contentDescription =
-                        ComplicationTextExpression(DynamicString.constant("Long Text")),
+                        DynamicComplicationText(DynamicString.constant("Long Text"), "fallback"),
                 )
                 .build()
         ),
     }
 
     @Test
-    fun testGetComplicationPreviewData_withExpression_fails() {
-        for (scenario in DataWithExpressionScenario.values()) {
+    fun testGetComplicationPreviewData_withDynamicValue_fails() {
+        for (scenario in DataWithDynamicValueScenario.values()) {
             mService.previewData = scenario.data
 
             val exception =
@@ -350,7 +354,7 @@
                 .withMessage(scenario.name)
                 .that(exception)
                 .hasMessageThat()
-                .isEqualTo("Preview data must not have expressions.")
+                .isEqualTo("Preview data must not have dynamic values.")
         }
     }
 
diff --git a/wear/watchface/watchface-complications-data-source/src/test/java/androidx/wear/watchface/complications/datasource/ComplicationDataTimelineTest.java b/wear/watchface/watchface-complications-data-source/src/test/java/androidx/wear/watchface/complications/datasource/ComplicationDataTimelineTest.java
index 5423cf2..f37b66a 100644
--- a/wear/watchface/watchface-complications-data-source/src/test/java/androidx/wear/watchface/complications/datasource/ComplicationDataTimelineTest.java
+++ b/wear/watchface/watchface-complications-data-source/src/test/java/androidx/wear/watchface/complications/datasource/ComplicationDataTimelineTest.java
@@ -142,31 +142,31 @@
                         "ComplicationDataTimeline("
                                 + "defaultComplicationData=ShortTextComplicationData("
                                 + "text=ComplicationText{mSurroundingText=Hello,"
-                                + " mTimeDependentText=null, mExpression=null}, title=null,"
+                                + " mTimeDependentText=null, mDynamicText=null}, title=null,"
                                 + " monochromaticImage=null, smallImage=null,"
                                 + " contentDescription=ComplicationText{mSurroundingText=,"
-                                + " mTimeDependentText=null, mExpression=null},"
+                                + " mTimeDependentText=null, mDynamicText=null},"
                                 + " tapActionLostDueToSerialization=false, tapAction=null, "
                                 + "validTimeRange=TimeRange("
                                 + "startDateTimeMillis=-1000000000-01-01T00:00:00Z,"
                                 + " endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z),"
                                 + " dataSource=null, persistencePolicy=0, displayPolicy=0, "
-                                + "fallback=null),"
+                                + "dynamicValueInvalidationFallback=null),"
                                 + " timelineEntries=["
                                 + "TimelineEntry(validity=TimeInterval(start=1970-01-02T03:46:40Z,"
                                 + " end=1970-01-03T07:33:20Z),"
                                 + " complicationData=ShortTextComplicationData("
                                 + "text=ComplicationText{mSurroundingText=Updated,"
-                                + " mTimeDependentText=null, mExpression=null}, title=null,"
+                                + " mTimeDependentText=null, mDynamicText=null}, title=null,"
                                 + " monochromaticImage=null, smallImage=null,"
                                 + " contentDescription=ComplicationText{mSurroundingText=,"
-                                + " mTimeDependentText=null, mExpression=null},"
+                                + " mTimeDependentText=null, mDynamicText=null},"
                                 + " tapActionLostDueToSerialization=false, tapAction=null, "
                                 + "validTimeRange=TimeRange("
                                 + "startDateTimeMillis=-1000000000-01-01T00:00:00Z,"
                                 + " endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z),"
                                 + " dataSource=null, persistencePolicy=0, displayPolicy=0, "
-                                + "fallback=null))])");
+                                + "dynamicValueInvalidationFallback=null))])");
     }
 
     @Test
diff --git a/wear/watchface/watchface-complications-data/api/current.txt b/wear/watchface/watchface-complications-data/api/current.txt
index d0ccbde..7344291 100644
--- a/wear/watchface/watchface-complications-data/api/current.txt
+++ b/wear/watchface/watchface-complications-data/api/current.txt
@@ -12,6 +12,7 @@
   public abstract sealed class ComplicationData {
     method public final android.content.ComponentName? getDataSource();
     method public final int getDisplayPolicy();
+    method public final androidx.wear.watchface.complications.data.ComplicationData? getDynamicValueInvalidationFallback();
     method public java.time.Instant getNextChangeInstant(java.time.Instant afterInstant);
     method public final int getPersistencePolicy();
     method public final android.app.PendingIntent? getTapAction();
@@ -22,6 +23,7 @@
     method public final void setTapActionLostDueToSerialization(boolean);
     property public final android.content.ComponentName? dataSource;
     property public final int displayPolicy;
+    property public final androidx.wear.watchface.complications.data.ComplicationData? dynamicValueInvalidationFallback;
     property public final int persistencePolicy;
     property public final android.app.PendingIntent? tapAction;
     property public final boolean tapActionLostDueToSerialization;
@@ -83,6 +85,18 @@
     property public final java.time.Instant instant;
   }
 
+  public final class DynamicComplicationText implements androidx.wear.watchface.complications.data.ComplicationText {
+    ctor public DynamicComplicationText(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString dynamicValue, String fallbackValue);
+    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString getDynamicValue();
+    method public String getFallbackValue();
+    method public java.time.Instant getNextChangeTime(java.time.Instant afterInstant);
+    method public CharSequence getTextAt(android.content.res.Resources resources, java.time.Instant instant);
+    method public boolean isAlwaysEmpty();
+    method public boolean returnsSameText(java.time.Instant firstInstant, java.time.Instant secondInstant);
+    property public final androidx.wear.protolayout.expression.DynamicBuilders.DynamicString dynamicValue;
+    property public final String fallbackValue;
+  }
+
   public final class EmptyComplicationData extends androidx.wear.watchface.complications.data.ComplicationData {
     ctor public EmptyComplicationData();
     field public static final androidx.wear.watchface.complications.data.ComplicationType TYPE;
@@ -91,6 +105,7 @@
   @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class GoalProgressComplicationData extends androidx.wear.watchface.complications.data.ComplicationData {
     method public androidx.wear.watchface.complications.data.ColorRamp? getColorRamp();
     method public androidx.wear.watchface.complications.data.ComplicationText? getContentDescription();
+    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
     method public androidx.wear.watchface.complications.data.MonochromaticImage? getMonochromaticImage();
     method public androidx.wear.watchface.complications.data.SmallImage? getSmallImage();
     method public float getTargetValue();
@@ -99,6 +114,7 @@
     method public float getValue();
     property public final androidx.wear.watchface.complications.data.ColorRamp? colorRamp;
     property public final androidx.wear.watchface.complications.data.ComplicationText? contentDescription;
+    property public final androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? dynamicValue;
     property public final androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage;
     property public final androidx.wear.watchface.complications.data.SmallImage? smallImage;
     property public final float targetValue;
@@ -110,11 +126,13 @@
   }
 
   @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public static final class GoalProgressComplicationData.Builder {
+    ctor public GoalProgressComplicationData.Builder(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat dynamicValue, float fallbackValue, float targetValue, androidx.wear.watchface.complications.data.ComplicationText contentDescription);
     ctor public GoalProgressComplicationData.Builder(float value, float targetValue, androidx.wear.watchface.complications.data.ComplicationText contentDescription);
     method public androidx.wear.watchface.complications.data.GoalProgressComplicationData build();
     method public androidx.wear.watchface.complications.data.GoalProgressComplicationData.Builder setColorRamp(androidx.wear.watchface.complications.data.ColorRamp? colorRamp);
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.GoalProgressComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.GoalProgressComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -143,6 +161,7 @@
     method public androidx.wear.watchface.complications.data.LongTextComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.LongTextComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? icon);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.LongTextComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -178,6 +197,7 @@
     method public androidx.wear.watchface.complications.data.MonochromaticImageComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.MonochromaticImageComplicationData.Builder setTapAction(android.app.PendingIntent? tapAction);
     method public androidx.wear.watchface.complications.data.MonochromaticImageComplicationData.Builder setValidTimeRange(androidx.wear.watchface.complications.data.TimeRange? validTimeRange);
@@ -210,6 +230,7 @@
     method public androidx.wear.watchface.complications.data.NoPermissionComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.NoPermissionComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.NoPermissionComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -236,6 +257,7 @@
     method public androidx.wear.watchface.complications.data.PhotoImageComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.PhotoImageComplicationData.Builder setTapAction(android.app.PendingIntent? tapAction);
     method public androidx.wear.watchface.complications.data.PhotoImageComplicationData.Builder setValidTimeRange(androidx.wear.watchface.complications.data.TimeRange? validTimeRange);
@@ -256,6 +278,7 @@
   public final class RangedValueComplicationData extends androidx.wear.watchface.complications.data.ComplicationData {
     method public androidx.wear.watchface.complications.data.ColorRamp? getColorRamp();
     method public androidx.wear.watchface.complications.data.ComplicationText? getContentDescription();
+    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
     method public float getMax();
     method public float getMin();
     method public androidx.wear.watchface.complications.data.MonochromaticImage? getMonochromaticImage();
@@ -266,6 +289,7 @@
     method public int getValueType();
     property public final androidx.wear.watchface.complications.data.ColorRamp? colorRamp;
     property public final androidx.wear.watchface.complications.data.ComplicationText? contentDescription;
+    property public final androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? dynamicValue;
     property public final float max;
     property public final float min;
     property public final androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage;
@@ -287,6 +311,7 @@
     method public androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder setColorRamp(androidx.wear.watchface.complications.data.ColorRamp? colorRamp);
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -317,6 +342,7 @@
     method public androidx.wear.watchface.complications.data.ShortTextComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.ShortTextComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.ShortTextComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -354,6 +380,7 @@
     method public androidx.wear.watchface.complications.data.SmallImageComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.SmallImageComplicationData.Builder setTapAction(android.app.PendingIntent? tapAction);
     method public androidx.wear.watchface.complications.data.SmallImageComplicationData.Builder setValidTimeRange(androidx.wear.watchface.complications.data.TimeRange? validTimeRange);
@@ -461,6 +488,7 @@
     method public androidx.wear.watchface.complications.data.WeightedElementsComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.WeightedElementsComplicationData.Builder setElementBackgroundColor(@ColorInt int elementBackgroundColor);
     method public androidx.wear.watchface.complications.data.WeightedElementsComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
diff --git a/wear/watchface/watchface-complications-data/api/public_plus_experimental_current.txt b/wear/watchface/watchface-complications-data/api/public_plus_experimental_current.txt
index 4aa8a0e..c9bc3f0 100644
--- a/wear/watchface/watchface-complications-data/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface-complications-data/api/public_plus_experimental_current.txt
@@ -12,6 +12,7 @@
   public abstract sealed class ComplicationData {
     method public final android.content.ComponentName? getDataSource();
     method public final int getDisplayPolicy();
+    method public final androidx.wear.watchface.complications.data.ComplicationData? getDynamicValueInvalidationFallback();
     method public java.time.Instant getNextChangeInstant(java.time.Instant afterInstant);
     method public final int getPersistencePolicy();
     method public final android.app.PendingIntent? getTapAction();
@@ -22,6 +23,7 @@
     method public final void setTapActionLostDueToSerialization(boolean);
     property public final android.content.ComponentName? dataSource;
     property public final int displayPolicy;
+    property public final androidx.wear.watchface.complications.data.ComplicationData? dynamicValueInvalidationFallback;
     property public final int persistencePolicy;
     property public final android.app.PendingIntent? tapAction;
     property public final boolean tapActionLostDueToSerialization;
@@ -86,6 +88,18 @@
     property public final java.time.Instant instant;
   }
 
+  public final class DynamicComplicationText implements androidx.wear.watchface.complications.data.ComplicationText {
+    ctor public DynamicComplicationText(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString dynamicValue, String fallbackValue);
+    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString getDynamicValue();
+    method public String getFallbackValue();
+    method public java.time.Instant getNextChangeTime(java.time.Instant afterInstant);
+    method public CharSequence getTextAt(android.content.res.Resources resources, java.time.Instant instant);
+    method public boolean isAlwaysEmpty();
+    method public boolean returnsSameText(java.time.Instant firstInstant, java.time.Instant secondInstant);
+    property public final androidx.wear.protolayout.expression.DynamicBuilders.DynamicString dynamicValue;
+    property public final String fallbackValue;
+  }
+
   public final class EmptyComplicationData extends androidx.wear.watchface.complications.data.ComplicationData {
     ctor public EmptyComplicationData();
     field public static final androidx.wear.watchface.complications.data.ComplicationType TYPE;
@@ -94,6 +108,7 @@
   @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class GoalProgressComplicationData extends androidx.wear.watchface.complications.data.ComplicationData {
     method public androidx.wear.watchface.complications.data.ColorRamp? getColorRamp();
     method public androidx.wear.watchface.complications.data.ComplicationText? getContentDescription();
+    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
     method public androidx.wear.watchface.complications.data.MonochromaticImage? getMonochromaticImage();
     method public androidx.wear.watchface.complications.data.SmallImage? getSmallImage();
     method public float getTargetValue();
@@ -102,6 +117,7 @@
     method public float getValue();
     property public final androidx.wear.watchface.complications.data.ColorRamp? colorRamp;
     property public final androidx.wear.watchface.complications.data.ComplicationText? contentDescription;
+    property public final androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? dynamicValue;
     property public final androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage;
     property public final androidx.wear.watchface.complications.data.SmallImage? smallImage;
     property public final float targetValue;
@@ -113,11 +129,13 @@
   }
 
   @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public static final class GoalProgressComplicationData.Builder {
+    ctor public GoalProgressComplicationData.Builder(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat dynamicValue, float fallbackValue, float targetValue, androidx.wear.watchface.complications.data.ComplicationText contentDescription);
     ctor public GoalProgressComplicationData.Builder(float value, float targetValue, androidx.wear.watchface.complications.data.ComplicationText contentDescription);
     method public androidx.wear.watchface.complications.data.GoalProgressComplicationData build();
     method public androidx.wear.watchface.complications.data.GoalProgressComplicationData.Builder setColorRamp(androidx.wear.watchface.complications.data.ColorRamp? colorRamp);
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.GoalProgressComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.GoalProgressComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -146,6 +164,7 @@
     method public androidx.wear.watchface.complications.data.LongTextComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.LongTextComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? icon);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.LongTextComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -181,6 +200,7 @@
     method public androidx.wear.watchface.complications.data.MonochromaticImageComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.MonochromaticImageComplicationData.Builder setTapAction(android.app.PendingIntent? tapAction);
     method public androidx.wear.watchface.complications.data.MonochromaticImageComplicationData.Builder setValidTimeRange(androidx.wear.watchface.complications.data.TimeRange? validTimeRange);
@@ -213,6 +233,7 @@
     method public androidx.wear.watchface.complications.data.NoPermissionComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.NoPermissionComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.NoPermissionComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -239,6 +260,7 @@
     method public androidx.wear.watchface.complications.data.PhotoImageComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.PhotoImageComplicationData.Builder setTapAction(android.app.PendingIntent? tapAction);
     method public androidx.wear.watchface.complications.data.PhotoImageComplicationData.Builder setValidTimeRange(androidx.wear.watchface.complications.data.TimeRange? validTimeRange);
@@ -259,6 +281,7 @@
   public final class RangedValueComplicationData extends androidx.wear.watchface.complications.data.ComplicationData {
     method public androidx.wear.watchface.complications.data.ColorRamp? getColorRamp();
     method public androidx.wear.watchface.complications.data.ComplicationText? getContentDescription();
+    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
     method public float getMax();
     method public float getMin();
     method public androidx.wear.watchface.complications.data.MonochromaticImage? getMonochromaticImage();
@@ -269,6 +292,7 @@
     method public int getValueType();
     property public final androidx.wear.watchface.complications.data.ColorRamp? colorRamp;
     property public final androidx.wear.watchface.complications.data.ComplicationText? contentDescription;
+    property public final androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? dynamicValue;
     property public final float max;
     property public final float min;
     property public final androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage;
@@ -290,6 +314,7 @@
     method public androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder setColorRamp(androidx.wear.watchface.complications.data.ColorRamp? colorRamp);
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -320,6 +345,7 @@
     method public androidx.wear.watchface.complications.data.ShortTextComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.ShortTextComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.ShortTextComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -357,6 +383,7 @@
     method public androidx.wear.watchface.complications.data.SmallImageComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.SmallImageComplicationData.Builder setTapAction(android.app.PendingIntent? tapAction);
     method public androidx.wear.watchface.complications.data.SmallImageComplicationData.Builder setValidTimeRange(androidx.wear.watchface.complications.data.TimeRange? validTimeRange);
@@ -464,6 +491,7 @@
     method public androidx.wear.watchface.complications.data.WeightedElementsComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.WeightedElementsComplicationData.Builder setElementBackgroundColor(@ColorInt int elementBackgroundColor);
     method public androidx.wear.watchface.complications.data.WeightedElementsComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
diff --git a/wear/watchface/watchface-complications-data/api/restricted_current.txt b/wear/watchface/watchface-complications-data/api/restricted_current.txt
index 81cfcf3..fd74604f 100644
--- a/wear/watchface/watchface-complications-data/api/restricted_current.txt
+++ b/wear/watchface/watchface-complications-data/api/restricted_current.txt
@@ -12,6 +12,7 @@
   public abstract sealed class ComplicationData {
     method public final android.content.ComponentName? getDataSource();
     method public final int getDisplayPolicy();
+    method public final androidx.wear.watchface.complications.data.ComplicationData? getDynamicValueInvalidationFallback();
     method public java.time.Instant getNextChangeInstant(java.time.Instant afterInstant);
     method public final int getPersistencePolicy();
     method public final android.app.PendingIntent? getTapAction();
@@ -22,6 +23,7 @@
     method public final void setTapActionLostDueToSerialization(boolean);
     property public final android.content.ComponentName? dataSource;
     property public final int displayPolicy;
+    property public final androidx.wear.watchface.complications.data.ComplicationData? dynamicValueInvalidationFallback;
     property public final int persistencePolicy;
     property public final android.app.PendingIntent? tapAction;
     property public final boolean tapActionLostDueToSerialization;
@@ -83,6 +85,19 @@
     property public final java.time.Instant instant;
   }
 
+  public final class DynamicComplicationText implements androidx.wear.watchface.complications.data.ComplicationText {
+    ctor public DynamicComplicationText(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString dynamicValue, String fallbackValue);
+    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString getDynamicValue();
+    method public String getFallbackValue();
+    method public java.time.Instant getNextChangeTime(java.time.Instant afterInstant);
+    method public CharSequence getTextAt(android.content.res.Resources resources, java.time.Instant instant);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public android.support.wearable.complications.TimeDependentText getTimeDependentText();
+    method public boolean isAlwaysEmpty();
+    method public boolean returnsSameText(java.time.Instant firstInstant, java.time.Instant secondInstant);
+    property public final androidx.wear.protolayout.expression.DynamicBuilders.DynamicString dynamicValue;
+    property public final String fallbackValue;
+  }
+
   public final class EmptyComplicationData extends androidx.wear.watchface.complications.data.ComplicationData {
     ctor public EmptyComplicationData();
     field public static final androidx.wear.watchface.complications.data.ComplicationType TYPE;
@@ -91,6 +106,7 @@
   @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class GoalProgressComplicationData extends androidx.wear.watchface.complications.data.ComplicationData {
     method public androidx.wear.watchface.complications.data.ColorRamp? getColorRamp();
     method public androidx.wear.watchface.complications.data.ComplicationText? getContentDescription();
+    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
     method public androidx.wear.watchface.complications.data.MonochromaticImage? getMonochromaticImage();
     method public androidx.wear.watchface.complications.data.SmallImage? getSmallImage();
     method public float getTargetValue();
@@ -99,6 +115,7 @@
     method public float getValue();
     property public final androidx.wear.watchface.complications.data.ColorRamp? colorRamp;
     property public final androidx.wear.watchface.complications.data.ComplicationText? contentDescription;
+    property public final androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? dynamicValue;
     property public final androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage;
     property public final androidx.wear.watchface.complications.data.SmallImage? smallImage;
     property public final float targetValue;
@@ -110,11 +127,13 @@
   }
 
   @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public static final class GoalProgressComplicationData.Builder {
+    ctor public GoalProgressComplicationData.Builder(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat dynamicValue, float fallbackValue, float targetValue, androidx.wear.watchface.complications.data.ComplicationText contentDescription);
     ctor public GoalProgressComplicationData.Builder(float value, float targetValue, androidx.wear.watchface.complications.data.ComplicationText contentDescription);
     method public androidx.wear.watchface.complications.data.GoalProgressComplicationData build();
     method public androidx.wear.watchface.complications.data.GoalProgressComplicationData.Builder setColorRamp(androidx.wear.watchface.complications.data.ColorRamp? colorRamp);
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.GoalProgressComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.GoalProgressComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -143,6 +162,7 @@
     method public androidx.wear.watchface.complications.data.LongTextComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.LongTextComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? icon);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.LongTextComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -178,6 +198,7 @@
     method public androidx.wear.watchface.complications.data.MonochromaticImageComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.MonochromaticImageComplicationData.Builder setTapAction(android.app.PendingIntent? tapAction);
     method public androidx.wear.watchface.complications.data.MonochromaticImageComplicationData.Builder setValidTimeRange(androidx.wear.watchface.complications.data.TimeRange? validTimeRange);
@@ -210,6 +231,7 @@
     method public androidx.wear.watchface.complications.data.NoPermissionComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.NoPermissionComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.NoPermissionComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -236,6 +258,7 @@
     method public androidx.wear.watchface.complications.data.PhotoImageComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.PhotoImageComplicationData.Builder setTapAction(android.app.PendingIntent? tapAction);
     method public androidx.wear.watchface.complications.data.PhotoImageComplicationData.Builder setValidTimeRange(androidx.wear.watchface.complications.data.TimeRange? validTimeRange);
@@ -257,6 +280,7 @@
   public final class RangedValueComplicationData extends androidx.wear.watchface.complications.data.ComplicationData {
     method public androidx.wear.watchface.complications.data.ColorRamp? getColorRamp();
     method public androidx.wear.watchface.complications.data.ComplicationText? getContentDescription();
+    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
     method public float getMax();
     method public float getMin();
     method public androidx.wear.watchface.complications.data.MonochromaticImage? getMonochromaticImage();
@@ -267,6 +291,7 @@
     method public int getValueType();
     property public final androidx.wear.watchface.complications.data.ColorRamp? colorRamp;
     property public final androidx.wear.watchface.complications.data.ComplicationText? contentDescription;
+    property public final androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? dynamicValue;
     property public final float max;
     property public final float min;
     property public final androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage;
@@ -288,6 +313,7 @@
     method public androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder setColorRamp(androidx.wear.watchface.complications.data.ColorRamp? colorRamp);
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -318,6 +344,7 @@
     method public androidx.wear.watchface.complications.data.ShortTextComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.ShortTextComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.ShortTextComplicationData.Builder setSmallImage(androidx.wear.watchface.complications.data.SmallImage? smallImage);
@@ -355,6 +382,7 @@
     method public androidx.wear.watchface.complications.data.SmallImageComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
     method public androidx.wear.watchface.complications.data.SmallImageComplicationData.Builder setTapAction(android.app.PendingIntent? tapAction);
     method public androidx.wear.watchface.complications.data.SmallImageComplicationData.Builder setValidTimeRange(androidx.wear.watchface.complications.data.TimeRange? validTimeRange);
@@ -464,6 +492,7 @@
     method public androidx.wear.watchface.complications.data.WeightedElementsComplicationData build();
     method public final BuilderT setDataSource(android.content.ComponentName? dataSource);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setDisplayPolicy(int displayPolicy);
+    method public final BuilderT setDynamicValueInvalidationFallback(BuiltT? fallback);
     method public androidx.wear.watchface.complications.data.WeightedElementsComplicationData.Builder setElementBackgroundColor(@ColorInt int elementBackgroundColor);
     method public androidx.wear.watchface.complications.data.WeightedElementsComplicationData.Builder setMonochromaticImage(androidx.wear.watchface.complications.data.MonochromaticImage? monochromaticImage);
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final BuilderT setPersistencePolicy(int persistencePolicy);
diff --git a/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationData.kt b/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationData.kt
index 949c589..7cb14ac 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationData.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationData.kt
@@ -172,8 +172,8 @@
             if (isFieldValidForType(FIELD_VALUE, type)) {
                 oos.writeFloat(complicationData.rangedValue)
             }
-            if (isFieldValidForType(FIELD_VALUE_EXPRESSION, type)) {
-                oos.writeNullable(complicationData.rangedValueExpression) {
+            if (isFieldValidForType(FIELD_DYNAMIC_VALUE, type)) {
+                oos.writeNullable(complicationData.rangedDynamicValue) {
                     oos.writeByteArray(it.toDynamicFloatByteArray())
                 }
             }
@@ -315,9 +315,9 @@
             if (isFieldValidForType(FIELD_VALUE, type)) {
                 fields.putFloat(FIELD_VALUE, ois.readFloat())
             }
-            if (isFieldValidForType(FIELD_VALUE_EXPRESSION, type)) {
+            if (isFieldValidForType(FIELD_DYNAMIC_VALUE, type)) {
                 ois.readNullable { ois.readByteArray() }
-                    ?.let { fields.putByteArray(FIELD_VALUE_EXPRESSION, it) }
+                    ?.let { fields.putByteArray(FIELD_DYNAMIC_VALUE, it) }
             }
             if (isFieldValidForType(FIELD_VALUE_TYPE, type)) {
                 fields.putInt(FIELD_VALUE_TYPE, ois.readInt())
@@ -589,25 +589,22 @@
         }
 
     /**
-     * Returns true if the ComplicationData contains a ranged value expression. I.e. if
-     * [rangedValueExpression] can succeed.
+     * Returns true if the ComplicationData contains a ranged dynamic value. I.e. if
+     * [rangedDynamicValue] can succeed.
      */
-    fun hasRangedValueExpression(): Boolean =
-        isFieldValidForType(FIELD_VALUE_EXPRESSION, type) &&
-            fields.containsKey(FIELD_VALUE_EXPRESSION)
+    fun hasRangedDynamicValue(): Boolean =
+        isFieldValidForType(FIELD_DYNAMIC_VALUE, type) && fields.containsKey(FIELD_DYNAMIC_VALUE)
 
     /**
-     * Returns the *valueExpression* field for this complication.
+     * Returns the *dynamicValue* field for this complication.
      *
      * Valid only if the type of this complication data is [TYPE_RANGED_VALUE] and
      * [TYPE_GOAL_PROGRESS].
      */
-    val rangedValueExpression: DynamicFloat?
+    val rangedDynamicValue: DynamicFloat?
         get() {
-            checkFieldValidForTypeWithoutThrowingException(FIELD_VALUE_EXPRESSION, type)
-            return fields.getByteArray(FIELD_VALUE_EXPRESSION)?.let {
-                DynamicFloat.fromByteArray(it)
-            }
+            checkFieldValidForTypeWithoutThrowingException(FIELD_DYNAMIC_VALUE, type)
+            return fields.getByteArray(FIELD_DYNAMIC_VALUE)?.let { DynamicFloat.fromByteArray(it) }
         }
 
     /**
@@ -1116,17 +1113,17 @@
     val endDateTimeMillis: Long
         get() = fields.getLong(FIELD_END_TIME, Long.MAX_VALUE)
 
-    /** Returns `true` if the complication contains an expression that needs to be evaluated. */
-    fun hasExpression(): Boolean =
-        (hasRangedValueExpression() && rangedValueExpression != null) ||
-            (hasLongText() && longText?.expression != null) ||
-            (hasLongTitle() && longTitle?.expression != null) ||
-            (hasShortText() && shortText?.expression != null) ||
-            (hasShortTitle() && shortTitle?.expression != null) ||
-            (hasContentDescription() && contentDescription?.expression != null) ||
-            (placeholder?.hasExpression() ?: false) ||
-            (timelineEntries?.any { it.hasExpression() } ?: false) ||
-            (listEntries?.any { it.hasExpression() } ?: false)
+    /** Returns `true` if the complication contains a dynamic value that needs to be evaluated. */
+    fun hasDynamicValues(): Boolean =
+        (hasRangedDynamicValue() && rangedDynamicValue != null) ||
+            (hasLongText() && longText?.dynamicValue != null) ||
+            (hasLongTitle() && longTitle?.dynamicValue != null) ||
+            (hasShortText() && shortText?.dynamicValue != null) ||
+            (hasShortTitle() && shortTitle?.dynamicValue != null) ||
+            (hasContentDescription() && contentDescription?.dynamicValue != null) ||
+            (placeholder?.hasDynamicValues() ?: false) ||
+            (timelineEntries?.any { it.hasDynamicValues() } ?: false) ||
+            (listEntries?.any { it.hasDynamicValues() } ?: false)
 
     /**
      * Returns true if the complication data contains at least one text field with a value that may
@@ -1179,11 +1176,11 @@
 
     override fun equals(other: Any?): Boolean =
         other is ComplicationData &&
-            equalsWithoutExpressions(other) &&
+            equalsWithoutDynamicValues(other) &&
             (!isFieldValidForType(FIELD_VALUE, type) || rangedValue == other.rangedValue) &&
-            (!isFieldValidForType(FIELD_VALUE_EXPRESSION, type) ||
-                rangedValueExpression?.toDynamicFloatByteArray() contentEquals
-                    other.rangedValueExpression?.toDynamicFloatByteArray()) &&
+            (!isFieldValidForType(FIELD_DYNAMIC_VALUE, type) ||
+                rangedDynamicValue?.toDynamicFloatByteArray() contentEquals
+                    other.rangedDynamicValue?.toDynamicFloatByteArray()) &&
             (!isFieldValidForType(FIELD_SHORT_TITLE, type) || shortTitle == other.shortTitle) &&
             (!isFieldValidForType(FIELD_SHORT_TEXT, type) || shortText == other.shortText) &&
             (!isFieldValidForType(FIELD_LONG_TITLE, type) || longTitle == other.longTitle) &&
@@ -1196,16 +1193,14 @@
                 timelineEntries == other.timelineEntries) &&
             (!isFieldValidForType(EXP_FIELD_LIST_ENTRIES, type) || listEntries == other.listEntries)
 
-    /** Similar to [equals], but avoids comparing evaluated fields (if expressions exist). */
+    /** Similar to [equals], but avoids comparing evaluated fields (if dynamic values exist). */
     infix fun equalsUnevaluated(other: ComplicationData): Boolean =
-        equalsWithoutExpressions(other) &&
-            if (
-                !isFieldValidForType(FIELD_VALUE_EXPRESSION, type) || rangedValueExpression == null
-            ) {
+        equalsWithoutDynamicValues(other) &&
+            if (!isFieldValidForType(FIELD_DYNAMIC_VALUE, type) || rangedDynamicValue == null) {
                 !isFieldValidForType(FIELD_VALUE, type) || rangedValue == other.rangedValue
             } else {
-                rangedValueExpression?.toDynamicFloatByteArray() contentEquals
-                    other.rangedValueExpression?.toDynamicFloatByteArray()
+                rangedDynamicValue?.toDynamicFloatByteArray() contentEquals
+                    other.rangedDynamicValue?.toDynamicFloatByteArray()
             } &&
             (!isFieldValidForType(FIELD_SHORT_TITLE, type) ||
                 shortTitle equalsUnevaluated other.shortTitle) &&
@@ -1243,12 +1238,12 @@
         if (this == null && other == null) return true
         if (this == null || other == null) return false
         // Both are non-null.
-        if (this.expression == null) return equals(other)
-        return this.expression?.toDynamicStringByteArray() contentEquals
-            other.expression?.toDynamicStringByteArray()
+        if (this.dynamicValue == null) return equals(other)
+        return this.dynamicValue?.toDynamicStringByteArray() contentEquals
+            other.dynamicValue?.toDynamicStringByteArray()
     }
 
-    private fun equalsWithoutExpressions(other: ComplicationData): Boolean =
+    private fun equalsWithoutDynamicValues(other: ComplicationData): Boolean =
         this === other ||
             (type == other.type &&
                 (!isFieldValidForType(FIELD_TAP_ACTION_LOST, type) ||
@@ -1324,8 +1319,8 @@
             if (isFieldValidForType(EXP_FIELD_LIST_ENTRIES, type)) listEntries else null,
             if (isFieldValidForType(FIELD_DATA_SOURCE, type)) dataSource else null,
             if (isFieldValidForType(FIELD_VALUE, type)) rangedValue else null,
-            if (isFieldValidForType(FIELD_VALUE_EXPRESSION, type)) {
-                Arrays.hashCode(rangedValueExpression?.toDynamicFloatByteArray())
+            if (isFieldValidForType(FIELD_DYNAMIC_VALUE, type)) {
+                Arrays.hashCode(rangedDynamicValue?.toDynamicFloatByteArray())
             } else {
                 null
             },
@@ -1485,15 +1480,15 @@
         fun setRangedValue(value: Float?) = apply { putOrRemoveField(FIELD_VALUE, value) }
 
         /**
-         * Sets the *valueExpression* field. It is evaluated to a value with the same limitations as
+         * Sets the *dynamicValue* field. It is evaluated to a value with the same limitations as
          * [setRangedValue].
          *
          * Returns this Builder to allow chaining.
          *
          * @throws IllegalStateException if this field is not valid for the complication type
          */
-        fun setRangedValueExpression(value: DynamicFloat?) = apply {
-            putOrRemoveField(FIELD_VALUE_EXPRESSION, value?.toDynamicFloatByteArray())
+        fun setRangedDynamicValue(value: DynamicFloat?) = apply {
+            putOrRemoveField(FIELD_DYNAMIC_VALUE, value?.toDynamicFloatByteArray())
         }
 
         /**
@@ -2162,7 +2157,7 @@
         private const val FIELD_TIMELINE_ENTRIES = "TIMELINE"
         private const val FIELD_TIMELINE_ENTRY_TYPE = "TIMELINE_ENTRY_TYPE"
         private const val FIELD_VALUE = "VALUE"
-        private const val FIELD_VALUE_EXPRESSION = "VALUE_EXPRESSION"
+        private const val FIELD_DYNAMIC_VALUE = "DYNAMIC_VALUE"
         private const val FIELD_VALUE_TYPE = "VALUE_TYPE"
 
         // Experimental fields, these are subject to change without notice.
@@ -2235,7 +2230,7 @@
                 TYPE_EMPTY to setOf(),
                 TYPE_SHORT_TEXT to setOf(),
                 TYPE_LONG_TEXT to setOf(),
-                TYPE_RANGED_VALUE to setOf(setOf(FIELD_VALUE, FIELD_VALUE_EXPRESSION)),
+                TYPE_RANGED_VALUE to setOf(setOf(FIELD_VALUE, FIELD_DYNAMIC_VALUE)),
                 TYPE_ICON to setOf(),
                 TYPE_SMALL_IMAGE to setOf(),
                 TYPE_LARGE_IMAGE to setOf(),
@@ -2243,7 +2238,7 @@
                 TYPE_NO_DATA to setOf(),
                 EXP_TYPE_PROTO_LAYOUT to setOf(),
                 EXP_TYPE_LIST to setOf(),
-                TYPE_GOAL_PROGRESS to setOf(setOf(FIELD_VALUE, FIELD_VALUE_EXPRESSION)),
+                TYPE_GOAL_PROGRESS to setOf(setOf(FIELD_VALUE, FIELD_DYNAMIC_VALUE)),
                 TYPE_WEIGHTED_ELEMENTS to setOf(),
             )
 
@@ -2353,7 +2348,7 @@
                         FIELD_TAP_ACTION_LOST,
                         FIELD_TARGET_VALUE,
                         FIELD_VALUE,
-                        FIELD_VALUE_EXPRESSION,
+                        FIELD_DYNAMIC_VALUE,
                         FIELD_VALUE_TYPE,
                         EXP_FIELD_LIST_ENTRIES,
                         EXP_FIELD_LIST_ENTRY_TYPE,
diff --git a/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationText.java b/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationText.java
index 9a29715..952d534 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationText.java
+++ b/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationText.java
@@ -60,7 +60,6 @@
  * one of the provided builders: {@link TimeDifferenceBuilder} or {@link TimeFormatBuilder}.
  *
  * <p>Note this class is not thread safe.
- *
  */
 @SuppressLint("BanParcelableUsage")
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -75,16 +74,16 @@
             return false;
         }
         ComplicationText that = (ComplicationText) o;
-        if (mExpression == null) {
-            if (that.mExpression != null) {
+        if (mDynamicText == null) {
+            if (that.mDynamicText != null) {
                 return false;
             }
         } else {
-            if (that.mExpression == null) {
+            if (that.mDynamicText == null) {
                 return false;
             } else if (!Arrays.equals(
-                    mExpression.toDynamicStringByteArray(),
-                    that.mExpression.toDynamicStringByteArray())) {
+                    mDynamicText.toDynamicStringByteArray(),
+                    that.mDynamicText.toDynamicStringByteArray())) {
                 return false;
             }
         }
@@ -110,9 +109,9 @@
         return Objects.hash(
                 mSurroundingText,
                 mTimeDependentText,
-                mExpression == null
+                mDynamicText == null
                         ? null
-                        : Arrays.hashCode(mExpression.toDynamicStringByteArray()));
+                        : Arrays.hashCode(mDynamicText.toDynamicStringByteArray()));
     }
 
     @NonNull
@@ -123,8 +122,8 @@
                 + ComplicationData.maybeRedact(mSurroundingText)
                 + ", mTimeDependentText="
                 + mTimeDependentText
-                + ", mExpression="
-                + mExpression
+                + ", mDynamicText="
+                + mDynamicText
                 + "}";
     }
 
@@ -253,7 +252,7 @@
     private static final String KEY_DIFFERENCE_STYLE = "difference_style";
     private static final String KEY_DIFFERENCE_SHOW_NOW_TEXT = "show_now_text";
     private static final String KEY_DIFFERENCE_MINIMUM_UNIT = "minimum_unit";
-    private static final String KEY_STRING_EXPRESSION = "string_expression";
+    private static final String KEY_DYNAMIC_STRING = "dynamic_string";
     private static final String KEY_FORMAT_FORMAT_STRING = "format_format_string";
     private static final String KEY_FORMAT_STYLE = "format_style";
     private static final String KEY_FORMAT_TIME_ZONE = "format_time_zone";
@@ -291,7 +290,7 @@
     @Nullable private final TimeDependentText mTimeDependentText;
 
     /** A {@link DynamicString} which will be evaluated by the system on the WatchFace's behalf. */
-    @Nullable private final DynamicString mExpression;
+    @Nullable private final DynamicString mDynamicText;
 
     /** Used to replace occurrences of ^1 with time dependent text and ignore ^[2-9]. */
     private final CharSequence[] mTemplateValues =
@@ -305,39 +304,39 @@
     private ComplicationText(
             @Nullable CharSequence surroundingText,
             @Nullable TimeDependentText timeDependentText,
-            @Nullable DynamicString expression) {
+            @Nullable DynamicString dynamicText) {
         mSurroundingText = surroundingText;
         mTimeDependentText = timeDependentText;
-        mExpression = expression;
+        mDynamicText = dynamicText;
         checkFields();
     }
 
     public ComplicationText(@NonNull CharSequence surroundingText) {
-        this(surroundingText, /* timeDependentText= */ null, /* expression= */ null);
+        this(surroundingText, /* timeDependentText= */ null, /* dynamicText= */ null);
     }
 
     public ComplicationText(
             @NonNull CharSequence surroundingText, @NonNull TimeDependentText timeDependentText) {
-        this(surroundingText, timeDependentText, /* expression= */ null);
+        this(surroundingText, timeDependentText, /* dynamicText= */ null);
     }
 
     public ComplicationText(
-            @NonNull CharSequence surroundingText, @NonNull DynamicString expression) {
-        this(surroundingText, /* timeDependentText= */ null, expression);
+            @NonNull CharSequence surroundingText, @NonNull DynamicString dynamicText) {
+        this(surroundingText, /* timeDependentText= */ null, dynamicText);
     }
 
-    public ComplicationText(@NonNull DynamicString expression) {
-        this(/* surroundingText= */ null, /* timeDependentText= */ null, expression);
+    public ComplicationText(@NonNull DynamicString dynamicText) {
+        this(/* surroundingText= */ null, /* timeDependentText= */ null, dynamicText);
     }
 
     private ComplicationText(@NonNull Parcel in) {
         Bundle bundle = in.readBundle(getClass().getClassLoader());
         mSurroundingText = bundle.getCharSequence(KEY_SURROUNDING_STRING);
 
-        if (bundle.containsKey(KEY_STRING_EXPRESSION)) {
-            mExpression = DynamicString.fromByteArray(bundle.getByteArray(KEY_STRING_EXPRESSION));
+        if (bundle.containsKey(KEY_DYNAMIC_STRING)) {
+            mDynamicText = DynamicString.fromByteArray(bundle.getByteArray(KEY_DYNAMIC_STRING));
         } else {
-            mExpression = null;
+            mDynamicText = null;
         }
 
         if (bundle.containsKey(KEY_DIFFERENCE_STYLE)
@@ -370,24 +369,24 @@
     private static class SerializedForm implements Serializable {
         CharSequence mSurroundingText;
         TimeDependentText mTimeDependentText;
-        DynamicString mExpression;
+        DynamicString mDynamicText;
 
         SerializedForm(
                 @Nullable CharSequence surroundingText,
                 @Nullable TimeDependentText timeDependentText,
-                @Nullable DynamicString expression) {
+                @Nullable DynamicString dynamicText) {
             mSurroundingText = surroundingText;
             mTimeDependentText = timeDependentText;
-            mExpression = expression;
+            mDynamicText = dynamicText;
         }
 
         private void writeObject(ObjectOutputStream oos) throws IOException {
             CharSequenceSerializableHelper.writeToStream(mSurroundingText, oos);
             oos.writeObject(mTimeDependentText);
-            if (mExpression == null) {
+            if (mDynamicText == null) {
                 oos.writeInt(0);
             } else {
-                byte[] bytes = mExpression.toDynamicStringByteArray();
+                byte[] bytes = mDynamicText.toDynamicStringByteArray();
                 oos.writeInt(bytes.length);
                 oos.write(bytes);
             }
@@ -398,22 +397,22 @@
             mTimeDependentText = (TimeDependentText) ois.readObject();
             int length = ois.readInt();
             if (length == 0) {
-                mExpression = null;
+                mDynamicText = null;
             } else {
                 byte[] bytes = new byte[length];
                 ois.readFully(bytes);
-                mExpression = DynamicString.fromByteArray(bytes);
+                mDynamicText = DynamicString.fromByteArray(bytes);
             }
         }
 
         @SuppressLint("SyntheticAccessor")
         Object readResolve() {
-            return new ComplicationText(mSurroundingText, mTimeDependentText, mExpression);
+            return new ComplicationText(mSurroundingText, mTimeDependentText, mDynamicText);
         }
     }
 
     Object writeReplace() {
-        return new SerializedForm(mSurroundingText, mTimeDependentText, mExpression);
+        return new SerializedForm(mSurroundingText, mTimeDependentText, mDynamicText);
     }
 
     private void readObject(ObjectInputStream stream) throws InvalidObjectException {
@@ -437,9 +436,10 @@
     }
 
     private void checkFields() {
-        if (mSurroundingText == null && mTimeDependentText == null && mExpression == null) {
+        if (mSurroundingText == null && mTimeDependentText == null && mDynamicText == null) {
             throw new IllegalStateException(
-                    "One of mSurroundingText, mTimeDependentText and mExpression must be non-null");
+                    "One of mSurroundingText, mTimeDependentText and mDynamicText must be "
+                            + "non-null");
         }
     }
 
@@ -454,8 +454,8 @@
         Bundle bundle = new Bundle();
         bundle.putCharSequence(KEY_SURROUNDING_STRING, mSurroundingText);
 
-        if (mExpression != null) {
-            bundle.putByteArray(KEY_STRING_EXPRESSION, mExpression.toDynamicStringByteArray());
+        if (mDynamicText != null) {
+            bundle.putByteArray(KEY_DYNAMIC_STRING, mDynamicText.toDynamicStringByteArray());
         }
 
         if (mTimeDependentText != null) {
@@ -483,16 +483,13 @@
         out.writeBundle(bundle);
     }
 
-    /**
-     * Returns the time-dependent part of the complication text.
-     *
-     */
+    /** Returns the time-dependent part of the complication text. */
     @NonNull
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     public TimeDependentText getTimeDependentText() {
-        if (mExpression != null) {
+        if (mDynamicText != null) {
             throw new UnsupportedOperationException(
-                    "getTimeDependentText not supported for " + "StringExpressions");
+                    "getTimeDependentText not supported for DynamicText");
         }
         assert mTimeDependentText != null;
         return mTimeDependentText;
@@ -514,9 +511,8 @@
     @NonNull
     @Override
     public CharSequence getTextAt(@NonNull Resources resources, long dateTimeMillis) {
-        if (mExpression != null && mTimeDependentText == null && mSurroundingText == null) {
-            throw new UnsupportedOperationException(
-                    "getTextAt not supported for " + "StringExpressions");
+        if (mDynamicText != null && mTimeDependentText == null && mSurroundingText == null) {
+            throw new UnsupportedOperationException("getTextAt not supported for DynamicText");
         }
 
         if (mTimeDependentText == null) {
@@ -549,8 +545,8 @@
 
     /** Returns the {@link DynamicString} to be evaluated to display this text. */
     @Nullable
-    public DynamicString getExpression() {
-        return mExpression;
+    public DynamicString getDynamicValue() {
+        return mDynamicText;
     }
 
     /** Whether or not this is a placeholder. */
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Data.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Data.kt
index 1215a97..6d7ec59 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Data.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Data.kt
@@ -104,6 +104,11 @@
  *   requires the watchface to be built with a compatible library to work.
  * @property displayPolicy The [ComplicationDisplayPolicy] for this complication. This requires the
  *   watchface to be built with a compatible library to work.
+ * @property dynamicValueInvalidationFallback Used in case any dynamic value has been invalidated.
+ *
+ *   IMPORTANT: This is only used when the system supports dynamic values. See each dynamic field's
+ *   fallback companion field for the situation where the system does not support dynamic values at
+ *   all.
  */
 public sealed class ComplicationData
 constructor(
@@ -114,7 +119,7 @@
     public val dataSource: ComponentName?,
     @ComplicationPersistencePolicy public val persistencePolicy: Int,
     @ComplicationDisplayPolicy public val displayPolicy: Int,
-    private val fallback: ComplicationData?,
+    public val dynamicValueInvalidationFallback: ComplicationData?,
 ) {
     /**
      * [tapAction] which is a [PendingIntent] unfortunately can't be serialized. This property is
@@ -151,11 +156,12 @@
         builder.setDataSource(dataSource)
         builder.setPersistencePolicy(persistencePolicy)
         builder.setDisplayPolicy(displayPolicy)
-        if (fallback == null) {
+        if (dynamicValueInvalidationFallback == null) {
             builder.setPlaceholder(null)
         } else {
-            val placeholderBuilder = fallback.createWireComplicationDataBuilder()
-            fallback.fillWireComplicationDataBuilder(placeholderBuilder)
+            val placeholderBuilder =
+                dynamicValueInvalidationFallback.createWireComplicationDataBuilder()
+            dynamicValueInvalidationFallback.fillWireComplicationDataBuilder(placeholderBuilder)
             builder.setPlaceholder(placeholderBuilder.build())
         }
     }
@@ -182,7 +188,7 @@
         other is ComplicationData && asWireComplicationData() == other.asWireComplicationData()
 
     /**
-     * Similar to [equals], but avoids comparing evaluated fields (if expressions exist).
+     * Similar to [equals], but avoids comparing evaluated fields (if dynamic values exist).
      *
      * @hide
      */
@@ -198,7 +204,7 @@
         internal var dataSource: ComponentName? = null
         internal var persistencePolicy = ComplicationPersistencePolicies.CACHING_ALLOWED
         internal var displayPolicy = ComplicationDisplayPolicies.ALWAYS_DISPLAY
-        internal var fallback: BuiltT? = null
+        internal var dynamicValueInvalidationFallback: BuiltT? = null
 
         /**
          * Sets the [ComponentName] of the ComplicationDataSourceService that provided this
@@ -239,12 +245,16 @@
             return this as BuilderT
         }
 
-        /** Sets the complication's fallback, use in case any expression has been invalidated. */
-        // TODO(b/269414040): Unhide complication expression APIs.
+        /**
+         * Sets the complication's fallback, used in case any dynamic value has been invalidated.
+         *
+         * IMPORTANT: This is only used when the system supports dynamic values. See each dynamic
+         * value field's fallback companion field for the situation where the system does not
+         * support dynamic values at all.
+         */
         @Suppress("UNCHECKED_CAST", "SetterReturnsThis")
-        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-        public fun setFallback(fallback: BuiltT?): BuilderT {
-            this.fallback = fallback
+        public fun setDynamicValueInvalidationFallback(fallback: BuiltT?): BuilderT {
+            this.dynamicValueInvalidationFallback = fallback
             return this as BuilderT
         }
 
@@ -284,7 +294,7 @@
         persistencePolicy = placeholder?.persistencePolicy
                 ?: ComplicationPersistencePolicies.CACHING_ALLOWED,
         displayPolicy = placeholder?.displayPolicy ?: ComplicationDisplayPolicies.ALWAYS_DISPLAY,
-        fallback = placeholder,
+        dynamicValueInvalidationFallback = placeholder,
     ) {
 
     /** Constructs a NoDataComplicationData without a [placeholder]. */
@@ -338,7 +348,7 @@
         dataSource = null,
         persistencePolicy = ComplicationPersistencePolicies.CACHING_ALLOWED,
         displayPolicy = ComplicationDisplayPolicies.ALWAYS_DISPLAY,
-        fallback = null,
+        dynamicValueInvalidationFallback = null,
     ) {
     // Always empty.
     override fun fillWireComplicationDataBuilder(builder: WireComplicationDataBuilder) {}
@@ -368,7 +378,7 @@
         dataSource = null,
         persistencePolicy = ComplicationPersistencePolicies.CACHING_ALLOWED,
         displayPolicy = ComplicationDisplayPolicies.ALWAYS_DISPLAY,
-        fallback = null,
+        dynamicValueInvalidationFallback = null,
     ) {
     // Always empty.
     override fun fillWireComplicationDataBuilder(builder: WireComplicationDataBuilder) {}
@@ -431,7 +441,6 @@
  *   be rendered as a light grey box.
  * @property contentDescription The content description field for accessibility. Please do not
  *   include the word 'complication' in the description.
- * @property fallback Used in case any expression has been invalidated.
  */
 public class ShortTextComplicationData
 internal constructor(
@@ -446,8 +455,7 @@
     dataSource: ComponentName?,
     @ComplicationPersistencePolicy persistencePolicy: Int,
     @ComplicationDisplayPolicy displayPolicy: Int,
-    // TODO(b/269414040): Unhide complication expression APIs.
-    @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public val fallback: ShortTextComplicationData?,
+    dynamicValueInvalidationFallback: ShortTextComplicationData?,
 ) :
     ComplicationData(
         TYPE,
@@ -457,7 +465,7 @@
         dataSource = dataSource,
         persistencePolicy = persistencePolicy,
         displayPolicy = displayPolicy,
-        fallback = fallback,
+        dynamicValueInvalidationFallback = dynamicValueInvalidationFallback,
     ) {
     /**
      * Builder for [ShortTextComplicationData].
@@ -518,7 +526,7 @@
                 dataSource,
                 persistencePolicy,
                 displayPolicy,
-                fallback,
+                dynamicValueInvalidationFallback,
             )
     }
 
@@ -546,7 +554,7 @@
             "tapActionLostDueToSerialization=$tapActionLostDueToSerialization, " +
             "tapAction=$tapAction, validTimeRange=$validTimeRange, dataSource=$dataSource, " +
             "persistencePolicy=$persistencePolicy, displayPolicy=$displayPolicy, " +
-            "fallback=$fallback)"
+            "dynamicValueInvalidationFallback=$dynamicValueInvalidationFallback)"
     }
 
     override fun hasPlaceholderFields() =
@@ -616,7 +624,6 @@
  *   be rendered as a light grey box.
  * @property contentDescription The content description field for accessibility. Please do not
  *   include the word 'complication' in the description.
- * @property fallback Used in case any expression has been invalidated.
  */
 public class LongTextComplicationData
 internal constructor(
@@ -631,8 +638,7 @@
     dataSource: ComponentName?,
     @ComplicationPersistencePolicy persistencePolicy: Int,
     @ComplicationDisplayPolicy displayPolicy: Int,
-    // TODO(b/269414040): Unhide complication expression APIs.
-    @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public val fallback: LongTextComplicationData?,
+    dynamicValueInvalidationFallback: LongTextComplicationData?,
 ) :
     ComplicationData(
         TYPE,
@@ -642,7 +648,7 @@
         dataSource = dataSource,
         persistencePolicy = persistencePolicy,
         displayPolicy = displayPolicy,
-        fallback = fallback,
+        dynamicValueInvalidationFallback = dynamicValueInvalidationFallback,
     ) {
     /**
      * Builder for [LongTextComplicationData].
@@ -704,7 +710,7 @@
                 dataSource,
                 persistencePolicy,
                 displayPolicy,
-                fallback,
+                dynamicValueInvalidationFallback,
             )
     }
 
@@ -732,7 +738,7 @@
             "tapActionLostDueToSerialization=$tapActionLostDueToSerialization, " +
             "tapAction=$tapAction, validTimeRange=$validTimeRange, dataSource=$dataSource, " +
             "persistencePolicy=$persistencePolicy, displayPolicy=$displayPolicy, " +
-            "fallback=$fallback)"
+            "dynamicValueInvalidationFallback=$dynamicValueInvalidationFallback)"
     }
 
     override fun hasPlaceholderFields() =
@@ -817,7 +823,7 @@
  * value may be accompanied by an icon and/or short text and title.
  *
  * The [min] and [max] fields are required for this type, as well as one of [value] or
- * [valueExpression]. The value within the range is expected to always be displayed.
+ * [dynamicValue]. The value within the range is expected to always be displayed.
  *
  * The icon, title, and text fields are optional and the watch face may choose which of these fields
  * to display, if any.
@@ -839,6 +845,9 @@
  *   [PLACEHOLDER]. If it's equal to [PLACEHOLDER] the renderer must treat it as a placeholder
  *   rather than rendering normally, its suggested to be drawn as a grey arc with a percentage value
  *   selected by the renderer. The semantic meaning of value is described by [valueType].
+ * @property dynamicValue The [DynamicFloat] optionally set by the data source. If present the
+ *   system will dynamically evaluate this and store the result in [value]. Watch faces can
+ *   typically ignore this field.
  * @property min The minimum [Float] value for this complication.
  * @property max The maximum [Float] value for this complication.
  * @property monochromaticImage A simple [MonochromaticImage] image that can be tinted by the watch
@@ -872,12 +881,11 @@
  * @property valueType The semantic meaning of [value]. The complication renderer may choose to
  *   visually differentiate between the different types, for example rendering a dot on a line/arc
  *   to indicate the value for a [TYPE_RATING].
- * @property fallback Used in case any expression has been invalidated.
  */
 public class RangedValueComplicationData
 internal constructor(
     public val value: Float,
-    @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET") valueExpression: DynamicFloat?,
+    public val dynamicValue: DynamicFloat?,
     public val min: Float,
     public val max: Float,
     public val monochromaticImage: MonochromaticImage?,
@@ -893,9 +901,7 @@
     @RangedValueType public val valueType: Int,
     @ComplicationPersistencePolicy persistencePolicy: Int,
     @ComplicationDisplayPolicy displayPolicy: Int,
-    // TODO(b/269414040): Unhide complication expression APIs.
-    @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public val fallback: RangedValueComplicationData?,
+    dynamicValueInvalidationFallback: RangedValueComplicationData?,
 ) :
     ComplicationData(
         TYPE,
@@ -905,7 +911,7 @@
         dataSource = dataSource,
         persistencePolicy = persistencePolicy,
         displayPolicy = displayPolicy,
-        fallback = fallback,
+        dynamicValueInvalidationFallback = dynamicValueInvalidationFallback,
     ) {
 
     init {
@@ -921,14 +927,6 @@
         }
     }
 
-    /**
-     * The [DynamicFloat] optionally set by the data source. If present the system will dynamically
-     * evaluate this and store the result in [value]. Watch faces can typically ignore this field.
-     */
-    // TODO(b/269414040): Unhide complication expression APIs.
-    @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public val valueExpression: DynamicFloat? = valueExpression
-
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     @IntDef(value = [TYPE_UNDEFINED, TYPE_RATING, TYPE_PERCENTAGE])
     public annotation class RangedValueType
@@ -937,14 +935,14 @@
      * Builder for [RangedValueComplicationData].
      *
      * You must at a minimum set the [min], [max] and [contentDescription] fields, at least one of
-     * [value] or [valueExpression], and at least one of [monochromaticImage], [smallImage], [text]
-     * or [title].
+     * [value] or [dynamicValue], and at least one of [monochromaticImage], [smallImage], [text] or
+     * [title].
      */
     public class Builder
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public constructor(
         private val value: Float,
-        private val valueExpression: DynamicFloat?,
+        private val dynamicValue: DynamicFloat?,
         private val min: Float,
         private val max: Float,
         private var contentDescription: ComplicationText
@@ -967,14 +965,22 @@
             min: Float,
             max: Float,
             contentDescription: ComplicationText
-        ) : this(value, valueExpression = null, min, max, contentDescription)
+        ) : this(value, dynamicValue = null, min, max, contentDescription)
 
         /**
          * Creates a [Builder] for a [RangedValueComplicationData] with a [DynamicFloat] value.
          *
-         * @param valueExpression The [DynamicFloat] of the ranged complication which will be
-         *   evaluated into a value dynamically, and should be in the range [[min]] .. [[max]]. The
+         * @param dynamicValue The [DynamicFloat] of the ranged complication which will be evaluated
+         *   into a value dynamically, and should be in the range [[min]] .. [[max]]. The semantic
+         *   meaning of value can be specified via [setValueType].
+         * @param fallbackValue The fallback value of the ranged complication used on systems that
+         *   don't support dynamic values, which should be in the range [[min]] .. [[max]]. The
          *   semantic meaning of value can be specified via [setValueType].
+         *
+         *   IMPORTANT: This is only used when the system does not support dynamic values _at all_.
+         *   See [setDynamicValueInvalidationFallback] for the situation where the dynamic value has
+         *   been invalidated.
+         *
          * @param min The minimum value. For [TYPE_PERCENTAGE] this must be 0f.
          * @param max The maximum value. This must be less than [Float.MAX_VALUE]. For
          *   [TYPE_PERCENTAGE] this must be 0f.
@@ -983,14 +989,14 @@
          *   complications do not have textual representation this attribute can be used for
          *   providing such. Please do not include the word 'complication' in the description.
          */
-        // TODO(b/269414040): Unhide complication expression APIs.
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         public constructor(
-            valueExpression: DynamicFloat,
+            dynamicValue: DynamicFloat,
+            fallbackValue: Float,
             min: Float,
             max: Float,
             contentDescription: ComplicationText
-        ) : this(value = min /* sensible default */, valueExpression, min, max, contentDescription)
+        ) : this(fallbackValue, dynamicValue, min, max, contentDescription)
 
         private var tapAction: PendingIntent? = null
         private var validTimeRange: TimeRange? = null
@@ -1050,7 +1056,7 @@
         public override fun build() =
             RangedValueComplicationData(
                 value,
-                valueExpression,
+                dynamicValue,
                 min,
                 max,
                 monochromaticImage,
@@ -1066,14 +1072,14 @@
                 valueType,
                 persistencePolicy,
                 displayPolicy,
-                fallback,
+                dynamicValueInvalidationFallback,
             )
     }
 
     override fun fillWireComplicationDataBuilder(builder: WireComplicationDataBuilder) {
         super.fillWireComplicationDataBuilder(builder)
         builder.setRangedValue(value)
-        builder.setRangedValueExpression(valueExpression)
+        builder.setRangedDynamicValue(dynamicValue)
         builder.setRangedMinValue(min)
         builder.setRangedMaxValue(max)
         monochromaticImage?.addToWireComplicationData(builder)
@@ -1103,20 +1109,21 @@
             } else {
                 value.toString()
             }
-        val valueExpressionString =
+        val dynamicValueString =
             if (WireComplicationData.shouldRedact()) {
                 "REDACTED"
             } else {
-                valueExpression.toString()
+                dynamicValue.toString()
             }
         return "RangedValueComplicationData(value=$valueString, " +
-            "valueExpression=$valueExpressionString, valueType=$valueType, min=$min, " +
+            "dynamicValue=$dynamicValueString, valueType=$valueType, min=$min, " +
             "max=$max, monochromaticImage=$monochromaticImage, smallImage=$smallImage, " +
             "title=$title, text=$text, contentDescription=$contentDescription), " +
             "tapActionLostDueToSerialization=$tapActionLostDueToSerialization, " +
             "tapAction=$tapAction, validTimeRange=$validTimeRange, dataSource=$dataSource, " +
             "colorRamp=$colorRamp, persistencePolicy=$persistencePolicy, " +
-            "displayPolicy=$displayPolicy, fallback=$fallback)"
+            "displayPolicy=$displayPolicy, " +
+            "dynamicValueInvalidationFallback=$dynamicValueInvalidationFallback)"
     }
 
     override fun hasPlaceholderFields() =
@@ -1176,8 +1183,8 @@
  * color to indicate progress past the goal). The value may be accompanied by an icon and/or short
  * text and title.
  *
- * The [targetValue] field is required for this type, as well as one of [value] or
- * [valueExpression]. The progress is expected to always be displayed.
+ * The [targetValue] field is required for this type, as well as one of [value] or [dynamicValue].
+ * The progress is expected to always be displayed.
  *
  * The icon, title, and text fields are optional and the watch face may choose which of these fields
  * to display, if any.
@@ -1204,6 +1211,9 @@
  *   than [targetValue]. If it's equal to [PLACEHOLDER] the renderer must treat it as a placeholder
  *   rather than rendering normally, its suggested to be drawn as a grey arc with a percentage value
  *   selected by the renderer.
+ * @property dynamicValue The [DynamicFloat] optionally set by the data source. If present the
+ *   system will dynamically evaluate this and store the result in [value]. Watch faces can
+ *   typically ignore this field.
  * @property targetValue The target [Float] value for this complication.
  * @property monochromaticImage A simple [MonochromaticImage] image that can be tinted by the watch
  *   face. If the monochromaticImage is equal to [MonochromaticImage.PLACEHOLDER] the renderer must
@@ -1233,13 +1243,12 @@
  *   include the word 'complication' in the description.
  * @property colorRamp Optional hint to render the progress bar representing [value] with the
  *   specified [ColorRamp].
- * @property fallback Used in case any expression has been invalidated.
  */
 @RequiresApi(Build.VERSION_CODES.TIRAMISU)
 public class GoalProgressComplicationData
 internal constructor(
     public val value: Float,
-    @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET") valueExpression: DynamicFloat?,
+    public val dynamicValue: DynamicFloat?,
     public val targetValue: Float,
     public val monochromaticImage: MonochromaticImage?,
     public val smallImage: SmallImage?,
@@ -1253,9 +1262,7 @@
     public val colorRamp: ColorRamp?,
     @ComplicationPersistencePolicy persistencePolicy: Int,
     @ComplicationDisplayPolicy displayPolicy: Int,
-    // TODO(b/269414040): Unhide complication expression APIs.
-    @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public val fallback: GoalProgressComplicationData?,
+    dynamicValueInvalidationFallback: GoalProgressComplicationData?,
 ) :
     ComplicationData(
         TYPE,
@@ -1265,7 +1272,7 @@
         dataSource = dataSource,
         persistencePolicy = persistencePolicy,
         displayPolicy = displayPolicy,
-        fallback = fallback,
+        dynamicValueInvalidationFallback = dynamicValueInvalidationFallback,
     ) {
 
     init {
@@ -1278,26 +1285,17 @@
     }
 
     /**
-     * The [DynamicFloat] optionally set by the data source. If present the system will dynamically
-     * evaluate this and store the result in [value]. Watch faces can typically ignore this field.
-     */
-    // TODO(b/269414040): Unhide complication expression APIs.
-    @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public val valueExpression: DynamicFloat? = valueExpression
-
-    /**
      * Builder for [GoalProgressComplicationData].
      *
      * You must at a minimum set the [targetValue] and [contentDescription] fields, one of [value]
-     * or [valueExpression], and at least one of [monochromaticImage], [smallImage], [text] or
-     * [title].
+     * or [dynamicValue], and at least one of [monochromaticImage], [smallImage], [text] or [title].
      */
     @RequiresApi(Build.VERSION_CODES.TIRAMISU)
     public class Builder
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public constructor(
         private val value: Float,
-        private val valueExpression: DynamicFloat?,
+        private val dynamicValue: DynamicFloat?,
         private val targetValue: Float,
         private var contentDescription: ComplicationText
     ) : BaseBuilder<Builder, GoalProgressComplicationData>() {
@@ -1315,31 +1313,32 @@
             value: Float,
             targetValue: Float,
             contentDescription: ComplicationText
-        ) : this(value, valueExpression = null, targetValue, contentDescription)
+        ) : this(value, dynamicValue = null, targetValue, contentDescription)
 
         /**
          * Creates a [Builder] for a [GoalProgressComplicationData] with a [DynamicFloat] value.
          *
-         * @param valueExpression The [DynamicFloat] of the goal complication which will be
-         *   evaluated into a value dynamically, and should be >= 0.
+         * @param dynamicValue The [DynamicFloat] of the goal complication which will be evaluated
+         *   into a value dynamically, and should be >= 0.
+         * @param fallbackValue The fallback value of the goal complication which will be used on
+         *   systems that don't support dynamic values, and should be >= 0.
+         *
+         *   IMPORTANT: This is only used when the system does not support dynamic values _at all_.
+         *   See [setDynamicValueInvalidationFallback] for the situation where the dynamic value has
+         *   been invalidated.
+         *
          * @param targetValue The target value. This must be less than [Float.MAX_VALUE].
          * @param contentDescription Defines localized text that briefly describes content of the
          *   complication. This property is used primarily for accessibility. Since some
          *   complications do not have textual representation this attribute can be used for
          *   providing such. Please do not include the word 'complication' in the description.
          */
-        // TODO(b/269414040): Unhide complication expression APIs.
-        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         public constructor(
-            valueExpression: DynamicFloat,
+            dynamicValue: DynamicFloat,
+            fallbackValue: Float,
             targetValue: Float,
             contentDescription: ComplicationText
-        ) : this(
-            value = 0f /* sensible default */,
-            valueExpression,
-            targetValue,
-            contentDescription
-        )
+        ) : this(fallbackValue, dynamicValue, targetValue, contentDescription)
 
         private var tapAction: PendingIntent? = null
         private var validTimeRange: TimeRange? = null
@@ -1388,7 +1387,7 @@
         public override fun build() =
             GoalProgressComplicationData(
                 value,
-                valueExpression,
+                dynamicValue,
                 targetValue,
                 monochromaticImage,
                 smallImage,
@@ -1402,14 +1401,14 @@
                 colorRamp,
                 persistencePolicy,
                 displayPolicy,
-                fallback = fallback,
+                dynamicValueInvalidationFallback,
             )
     }
 
     override fun fillWireComplicationDataBuilder(builder: WireComplicationDataBuilder) {
         super.fillWireComplicationDataBuilder(builder)
         builder.setRangedValue(value)
-        builder.setRangedValueExpression(valueExpression)
+        builder.setRangedDynamicValue(dynamicValue)
         builder.setTargetValue(targetValue)
         monochromaticImage?.addToWireComplicationData(builder)
         smallImage?.addToWireComplicationData(builder)
@@ -1437,20 +1436,21 @@
             } else {
                 value.toString()
             }
-        val valueExpressionString =
+        val dynamicValueString =
             if (WireComplicationData.shouldRedact()) {
                 "REDACTED"
             } else {
-                valueExpression.toString()
+                dynamicValue.toString()
             }
         return "GoalProgressComplicationData(value=$valueString, " +
-            "valueExpression=$valueExpressionString, targetValue=$targetValue, " +
+            "dynamicValue=$dynamicValueString, targetValue=$targetValue, " +
             "monochromaticImage=$monochromaticImage, smallImage=$smallImage, title=$title, " +
             "text=$text, contentDescription=$contentDescription), " +
             "tapActionLostDueToSerialization=$tapActionLostDueToSerialization, " +
             "tapAction=$tapAction, validTimeRange=$validTimeRange, dataSource=$dataSource, " +
             "colorRamp=$colorRamp, persistencePolicy=$persistencePolicy, " +
-            "displayPolicy=$displayPolicy, fallback=$fallback)"
+            "displayPolicy=$displayPolicy, " +
+            "dynamicValueInvalidationFallback=$dynamicValueInvalidationFallback)"
     }
 
     override fun hasPlaceholderFields() =
@@ -1545,7 +1545,6 @@
  *   grey box.
  * @property contentDescription The content description field for accessibility. Please do not
  *   include the word 'complication' in the description.
- * @property fallback Used in case any expression has been invalidated.
  */
 @RequiresApi(Build.VERSION_CODES.TIRAMISU)
 public class WeightedElementsComplicationData
@@ -1563,9 +1562,7 @@
     dataSource: ComponentName?,
     @ComplicationPersistencePolicy persistencePolicy: Int,
     @ComplicationDisplayPolicy displayPolicy: Int,
-    // TODO(b/269414040): Unhide complication expression APIs.
-    @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public val fallback: WeightedElementsComplicationData?,
+    dynamicValueInvalidationFallback: WeightedElementsComplicationData?,
 ) :
     ComplicationData(
         TYPE,
@@ -1575,7 +1572,7 @@
         dataSource = dataSource,
         persistencePolicy = persistencePolicy,
         displayPolicy = displayPolicy,
-        fallback = fallback,
+        dynamicValueInvalidationFallback = dynamicValueInvalidationFallback,
     ) {
 
     init {
@@ -1723,7 +1720,7 @@
                 dataSource,
                 persistencePolicy,
                 displayPolicy,
-                fallback,
+                dynamicValueInvalidationFallback,
             )
     }
 
@@ -1771,7 +1768,7 @@
             "tapActionLostDueToSerialization=$tapActionLostDueToSerialization, " +
             "tapAction=$tapAction, validTimeRange=$validTimeRange, dataSource=$dataSource, " +
             "persistencePolicy=$persistencePolicy, displayPolicy=$displayPolicy, " +
-            "fallback=$fallback)"
+            "dynamicValueInvalidationFallback=$dynamicValueInvalidationFallback)"
     }
 
     override fun hasPlaceholderFields() =
@@ -1825,7 +1822,6 @@
  *   any information to the user, then provide an empty content description. If no content
  *   description is provided, a generic content description will be used instead. Please do not
  *   include the word 'complication' in the description.
- * @property fallback Used in case any expression has been invalidated.
  */
 public class MonochromaticImageComplicationData
 internal constructor(
@@ -1837,9 +1833,7 @@
     dataSource: ComponentName?,
     @ComplicationPersistencePolicy persistencePolicy: Int,
     @ComplicationDisplayPolicy displayPolicy: Int,
-    // TODO(b/269414040): Unhide complication expression APIs.
-    @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public val fallback: MonochromaticImageComplicationData?,
+    dynamicValueInvalidationFallback: MonochromaticImageComplicationData?,
 ) :
     ComplicationData(
         TYPE,
@@ -1849,7 +1843,7 @@
         dataSource = dataSource,
         persistencePolicy = persistencePolicy,
         displayPolicy = displayPolicy,
-        fallback = fallback,
+        dynamicValueInvalidationFallback = dynamicValueInvalidationFallback,
     ) {
     /**
      * Builder for [MonochromaticImageComplicationData].
@@ -1891,7 +1885,7 @@
                 dataSource,
                 persistencePolicy,
                 displayPolicy,
-                fallback,
+                dynamicValueInvalidationFallback,
             )
     }
 
@@ -1917,7 +1911,7 @@
             "tapActionLostDueToSerialization=$tapActionLostDueToSerialization, " +
             "tapAction=$tapAction, validTimeRange=$validTimeRange, dataSource=$dataSource, " +
             "persistencePolicy=$persistencePolicy, displayPolicy=$displayPolicy, " +
-            "fallback=$fallback)"
+            "dynamicValueInvalidationFallback=$dynamicValueInvalidationFallback)"
     }
 
     /** @hide */
@@ -1948,7 +1942,6 @@
  *   any information to the user, then provide an empty content description. If no content
  *   description is provided, a generic content description will be used instead. Please do not
  *   include the word 'complication' in the description.
- * @property fallback Used in case any expression has been invalidated.
  */
 public class SmallImageComplicationData
 internal constructor(
@@ -1960,9 +1953,7 @@
     dataSource: ComponentName?,
     @ComplicationPersistencePolicy persistencePolicy: Int,
     @ComplicationDisplayPolicy displayPolicy: Int,
-    // TODO(b/269414040): Unhide complication expression APIs.
-    @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public val fallback: SmallImageComplicationData?,
+    dynamicValueInvalidationFallback: SmallImageComplicationData?,
 ) :
     ComplicationData(
         TYPE,
@@ -1972,7 +1963,7 @@
         dataSource = dataSource,
         persistencePolicy = persistencePolicy,
         displayPolicy = displayPolicy,
-        fallback = fallback,
+        dynamicValueInvalidationFallback = dynamicValueInvalidationFallback,
     ) {
     /**
      * Builder for [SmallImageComplicationData].
@@ -2014,7 +2005,7 @@
                 dataSource,
                 persistencePolicy,
                 displayPolicy,
-                fallback,
+                dynamicValueInvalidationFallback,
             )
     }
 
@@ -2038,7 +2029,7 @@
             "tapActionLostDueToSerialization=$tapActionLostDueToSerialization, " +
             "tapAction=$tapAction, validTimeRange=$validTimeRange, dataSource=$dataSource, " +
             "persistencePolicy=$persistencePolicy, displayPolicy=$displayPolicy, " +
-            "fallback=$fallback)"
+            "dynamicValueInvalidationFallback=$dynamicValueInvalidationFallback)"
     }
 
     override fun hasPlaceholderFields() = smallImage.isPlaceholder()
@@ -2076,7 +2067,6 @@
  *   any information to the user, then provide an empty content description. If no content
  *   description is provided, a generic content description will be used instead. Please do not
  *   include the word 'complication' in the description.
- * @property fallback Used in case any expression has been invalidated.
  */
 public class PhotoImageComplicationData
 internal constructor(
@@ -2088,9 +2078,7 @@
     dataSource: ComponentName?,
     @ComplicationPersistencePolicy persistencePolicy: Int,
     @ComplicationDisplayPolicy displayPolicy: Int,
-    // TODO(b/269414040): Unhide complication expression APIs.
-    @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public val fallback: PhotoImageComplicationData?,
+    dynamicValueInvalidationFallback: PhotoImageComplicationData?,
 ) :
     ComplicationData(
         TYPE,
@@ -2100,7 +2088,7 @@
         dataSource = dataSource,
         persistencePolicy = persistencePolicy,
         displayPolicy = displayPolicy,
-        fallback = fallback,
+        dynamicValueInvalidationFallback = dynamicValueInvalidationFallback,
     ) {
     /**
      * Builder for [PhotoImageComplicationData].
@@ -2143,7 +2131,7 @@
                 dataSource,
                 persistencePolicy,
                 displayPolicy,
-                fallback,
+                dynamicValueInvalidationFallback,
             )
     }
 
@@ -2167,7 +2155,7 @@
             "tapActionLostDueToSerialization=$tapActionLostDueToSerialization, " +
             "tapAction=$tapAction, validTimeRange=$validTimeRange, dataSource=$dataSource, " +
             "persistencePolicy=$persistencePolicy, displayPolicy=$displayPolicy, " +
-            "fallback=$fallback)"
+            "dynamicValueInvalidationFallback=$dynamicValueInvalidationFallback)"
     }
 
     override fun hasPlaceholderFields() = photoImage.isPlaceholder()
@@ -2234,7 +2222,7 @@
         dataSource = dataSource,
         persistencePolicy = persistencePolicy,
         displayPolicy = displayPolicy,
-        fallback = null,
+        dynamicValueInvalidationFallback = null,
     ) {
     /** Builder for [NoPermissionComplicationData]. */
     public class Builder : BaseBuilder<Builder, NoPermissionComplicationData>() {
@@ -2346,7 +2334,7 @@
                     dataSource = dataSource,
                     persistencePolicy = persistencePolicy,
                     displayPolicy = displayPolicy,
-                    fallback = placeholder?.toTypedApiComplicationData(),
+                    dynamicValueInvalidationFallback = placeholder?.toTypedApiComplicationData(),
                 )
             LongTextComplicationData.TYPE.toWireComplicationType() ->
                 LongTextComplicationData(
@@ -2362,12 +2350,12 @@
                     dataSource = dataSource,
                     persistencePolicy = persistencePolicy,
                     displayPolicy = displayPolicy,
-                    fallback = placeholder?.toTypedApiComplicationData(),
+                    dynamicValueInvalidationFallback = placeholder?.toTypedApiComplicationData(),
                 )
             RangedValueComplicationData.TYPE.toWireComplicationType() ->
                 RangedValueComplicationData(
                     value = rangedValue,
-                    valueExpression = rangedValueExpression,
+                    dynamicValue = rangedDynamicValue,
                     min = rangedMinValue,
                     max = rangedMaxValue,
                     monochromaticImage = parseIcon(placeholderAware),
@@ -2384,7 +2372,7 @@
                     valueType = rangedValueType,
                     persistencePolicy = persistencePolicy,
                     displayPolicy = displayPolicy,
-                    fallback = placeholder?.toTypedApiComplicationData(),
+                    dynamicValueInvalidationFallback = placeholder?.toTypedApiComplicationData(),
                 )
             MonochromaticImageComplicationData.TYPE.toWireComplicationType() ->
                 MonochromaticImageComplicationData(
@@ -2397,7 +2385,7 @@
                     dataSource = dataSource,
                     persistencePolicy = persistencePolicy,
                     displayPolicy = displayPolicy,
-                    fallback = placeholder?.toTypedApiComplicationData(),
+                    dynamicValueInvalidationFallback = placeholder?.toTypedApiComplicationData(),
                 )
             SmallImageComplicationData.TYPE.toWireComplicationType() ->
                 SmallImageComplicationData(
@@ -2410,7 +2398,7 @@
                     dataSource = dataSource,
                     persistencePolicy = persistencePolicy,
                     displayPolicy = displayPolicy,
-                    fallback = placeholder?.toTypedApiComplicationData(),
+                    dynamicValueInvalidationFallback = placeholder?.toTypedApiComplicationData(),
                 )
             PhotoImageComplicationData.TYPE.toWireComplicationType() ->
                 PhotoImageComplicationData(
@@ -2423,7 +2411,7 @@
                     dataSource = dataSource,
                     persistencePolicy = persistencePolicy,
                     displayPolicy = displayPolicy,
-                    fallback = placeholder?.toTypedApiComplicationData(),
+                    dynamicValueInvalidationFallback = placeholder?.toTypedApiComplicationData(),
                 )
             NoPermissionComplicationData.TYPE.toWireComplicationType() ->
                 NoPermissionComplicationData(
@@ -2439,7 +2427,7 @@
             GoalProgressComplicationData.TYPE.toWireComplicationType() ->
                 GoalProgressComplicationData(
                     value = rangedValue,
-                    valueExpression = rangedValueExpression,
+                    dynamicValue = rangedDynamicValue,
                     targetValue = targetValue,
                     monochromaticImage = parseIcon(placeholderAware),
                     smallImage = parseSmallImage(placeholderAware),
@@ -2454,7 +2442,7 @@
                     colorRamp = colorRamp?.let { ColorRamp(it, isColorRampInterpolated!!) },
                     persistencePolicy = persistencePolicy,
                     displayPolicy = displayPolicy,
-                    fallback = placeholder?.toTypedApiComplicationData(),
+                    dynamicValueInvalidationFallback = placeholder?.toTypedApiComplicationData(),
                 )
             WeightedElementsComplicationData.TYPE.toWireComplicationType() ->
                 WeightedElementsComplicationData(
@@ -2489,7 +2477,7 @@
                     dataSource = dataSource,
                     persistencePolicy = persistencePolicy,
                     displayPolicy = displayPolicy,
-                    fallback = placeholder?.toTypedApiComplicationData(),
+                    dynamicValueInvalidationFallback = placeholder?.toTypedApiComplicationData(),
                 )
             else -> NoDataComplicationData()
         }
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluator.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/DynamicComplicationDataEvaluator.kt
similarity index 94%
rename from wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluator.kt
rename to wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/DynamicComplicationDataEvaluator.kt
index ca001fa..b963cda 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluator.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/DynamicComplicationDataEvaluator.kt
@@ -60,17 +60,17 @@
  * [androidx.wear.protolayout.expression.DynamicBuilders.DynamicType] within its fields.
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-class ComplicationDataExpressionEvaluator(
+class DynamicComplicationDataEvaluator(
     private val stateStore: StateStore? = StateStore(emptyMap()),
     private val timeGateway: TimeGateway? = null,
     // TODO(b/281664278): remove the SensorGateway usage, implement PlatformDataProvider instead.
     private val sensorGateway: SensorGateway? = null,
-    private val keepExpression: Boolean = false,
+    private val keepDynamicValues: Boolean = false,
 ) {
     /**
      * Returns a [Flow] that provides the evaluated [WireComplicationData].
      *
-     * The expression is evaluated _separately_ on each flow collection.
+     * The dynamic values are evaluated _separately_ on each flow collection.
      */
     fun evaluate(unevaluatedData: WireComplicationData): Flow<WireComplicationData> =
         evaluateTopLevelFields(unevaluatedData)
@@ -141,7 +141,7 @@
 
     /**
      * Same as [combineWithDataList], but sets the evaluated placeholder ONLY when the receiver
-     * [Flow] emits [TYPE_NO_DATA], or [keepExpression] is true, otherwise clears it and does not
+     * [Flow] emits [TYPE_NO_DATA], or [keepDynamicValues] is true, otherwise clears it and does not
      * wait for the placeholder to finish evaluating.
      *
      * If the placeholder is not required (per the above paragraph), this doesn't wait for it.
@@ -154,9 +154,9 @@
 
         return this.combine(evaluatedPlaceholderFlow).map {
             (data: WireComplicationData, evaluatedPlaceholder: WireComplicationData?) ->
-            if (!keepExpression && data.type != TYPE_NO_DATA) {
+            if (!keepDynamicValues && data.type != TYPE_NO_DATA) {
                 // Clearing the placeholder when data is not TYPE_NO_DATA (it was meant as an
-                // expression fallback).
+                // dynamic value fallback).
                 return@map WireComplicationData.Builder(data).setPlaceholder(null).build()
             }
             // Placeholder required but invalid, emitting invalid.
@@ -170,10 +170,10 @@
 
     private suspend fun WireComplicationData.buildState() =
         MutableStateFlow(State(this)).apply {
-            if (hasRangedValueExpression()) {
+            if (hasRangedDynamicValue()) {
                 addReceiver(
-                    rangedValueExpression,
-                    expressionTrimmer = { setRangedValueExpression(null) },
+                    rangedDynamicValue,
+                    dynamicValueTrimmer = { setRangedDynamicValue(null) },
                     setter = { setRangedValue(it) },
                 )
             }
@@ -191,24 +191,24 @@
         }
 
     private suspend fun MutableStateFlow<State>.addReceiver(
-        expression: DynamicFloat?,
-        expressionTrimmer: WireComplicationData.Builder.() -> WireComplicationData.Builder,
+        dynamicValue: DynamicFloat?,
+        dynamicValueTrimmer: WireComplicationData.Builder.() -> WireComplicationData.Builder,
         setter: WireComplicationData.Builder.(Float) -> WireComplicationData.Builder,
     ) {
-        expression ?: return
+        dynamicValue ?: return
         val executor = currentCoroutineContext().asExecutor()
         update { state ->
             state.withPendingReceiver(
                 ComplicationEvaluationResultReceiver<Float>(
                     this,
                     setter = { value ->
-                        if (!keepExpression) expressionTrimmer(this)
+                        if (!keepDynamicValues) dynamicValueTrimmer(this)
                         setter(this, value)
                     },
                     binder = { receiver ->
                         value.evaluator.bind(
                             DynamicTypeBindingRequest.forDynamicFloat(
-                                expression,
+                                dynamicValue,
                                 executor,
                                 receiver
                             )
@@ -223,7 +223,7 @@
         text: WireComplicationText?,
         setter: WireComplicationData.Builder.(WireComplicationText) -> WireComplicationData.Builder,
     ) {
-        val expression = text?.expression ?: return
+        val dynamicValue = text?.dynamicValue ?: return
         val executor = currentCoroutineContext().asExecutor()
         update {
             it.withPendingReceiver(
@@ -231,8 +231,8 @@
                     this,
                     setter = { value ->
                         setter(
-                            if (keepExpression) {
-                                WireComplicationText(value, expression)
+                            if (keepDynamicValues) {
+                                WireComplicationText(value, dynamicValue)
                             } else {
                                 WireComplicationText(value)
                             }
@@ -241,7 +241,7 @@
                     binder = { receiver ->
                         value.evaluator.bind(
                             DynamicTypeBindingRequest.forDynamicString(
-                                expression,
+                                dynamicValue,
                                 ULocale.getDefault(),
                                 executor,
                                 receiver
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Text.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Text.kt
index 0bdbfb6..486e1a8 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Text.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Text.kt
@@ -22,7 +22,6 @@
 import android.support.wearable.complications.ComplicationText as WireComplicationText
 import android.support.wearable.complications.ComplicationText.TimeDifferenceBuilder as WireComplicationTextTimeDifferenceBuilder
 import android.support.wearable.complications.ComplicationText.TimeFormatBuilder as WireComplicationTextTimeFormatBuilder
-import android.support.wearable.complications.TimeDependentText
 import android.support.wearable.complications.TimeDependentText as WireTimeDependentText
 import android.support.wearable.complications.TimeDifferenceText
 import android.text.style.ForegroundColorSpan
@@ -69,7 +68,8 @@
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public fun isPlaceholder(): Boolean = false
 
     /** @hide */
-    @RestrictTo(RestrictTo.Scope.SUBCLASSES) public fun getTimeDependentText(): TimeDependentText
+    @RestrictTo(RestrictTo.Scope.SUBCLASSES)
+    public fun getTimeDependentText(): WireTimeDependentText
 
     /** Converts this value to [WireComplicationText] object used for serialization. */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -517,7 +517,7 @@
 
     override fun isAlwaysEmpty() = delegate.isAlwaysEmpty
 
-    override fun getTimeDependentText(): TimeDependentText = delegate.timeDependentText
+    override fun getTimeDependentText(): WireTimeDependentText = delegate.timeDependentText
 
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) override fun toWireComplicationText() = delegate
 
@@ -578,7 +578,7 @@
 
     override fun isAlwaysEmpty() = false
 
-    override fun getTimeDependentText(): TimeDependentText = delegate
+    override fun getTimeDependentText(): WireTimeDependentText = delegate
 
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     override fun toWireComplicationText(): WireComplicationText {
@@ -608,14 +608,22 @@
     DelegatingTimeDependentText(this)
 
 /**
- * A [ComplicationText] where the system evaluates a [DynamicString] on behalf of the watch face. By
- * the time this reaches the watch face's Renderer, it'll have been converted to a plain
- * ComplicationText.
+ * A [ComplicationText] where the system evaluates a [DynamicString]. By the time this reaches the
+ * watch face's Renderer, it'll have been converted to a plain ComplicationText.
+ *
+ * @param dynamicValue The [DynamicString] which will be evaluated into a value dynamically.
+ * @param fallbackValue Used when the system does not support dynamic values.
+ *
+ *   IMPORTANT: This is only used when the system does not support dynamic values _at all_. See
+ *   [ComplicationData.BaseBuilder.setDynamicValueInvalidationFallback] for the situation where the
+ *   dynamic value has been invalidated.
  */
-// TODO(b/269414040): Unhide complication expression APIs.
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class ComplicationTextExpression(public val expression: DynamicString) : ComplicationText {
-    private val delegate = DelegatingComplicationText(WireComplicationText(expression))
+public class DynamicComplicationText(
+    public val dynamicValue: DynamicString,
+    public val fallbackValue: String,
+) : ComplicationText {
+    private val delegate =
+        DelegatingComplicationText(WireComplicationText(fallbackValue, dynamicValue))
 
     override fun getTextAt(resources: Resources, instant: Instant) =
         delegate.getTextAt(resources, instant)
@@ -631,7 +639,7 @@
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     override fun isPlaceholder(): Boolean = delegate.isPlaceholder()
 
-    @RestrictTo(RestrictTo.Scope.SUBCLASSES)
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
     override fun getTimeDependentText() = delegate.getTimeDependentText()
 
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -641,7 +649,7 @@
         if (this === other) return true
         if (javaClass != other?.javaClass) return false
 
-        other as ComplicationTextExpression
+        other as DynamicComplicationText
 
         if (delegate != other.delegate) return false
 
diff --git a/wear/watchface/watchface-complications-data/src/test/java/android/support/wearable/complications/ComplicationDataEqualityTest.kt b/wear/watchface/watchface-complications-data/src/test/java/android/support/wearable/complications/ComplicationDataEqualityTest.kt
index 7f7a002..0da556a 100644
--- a/wear/watchface/watchface-complications-data/src/test/java/android/support/wearable/complications/ComplicationDataEqualityTest.kt
+++ b/wear/watchface/watchface-complications-data/src/test/java/android/support/wearable/complications/ComplicationDataEqualityTest.kt
@@ -89,8 +89,8 @@
             { setRangedValue(2f) },
         ),
         RANGED_VALUE_EXPRESSION(
-            { setRangedValueExpression(DynamicFloat.constant(1.2f)) },
-            { setRangedValueExpression(DynamicFloat.constant(3.4f)) },
+            { setRangedDynamicValue(DynamicFloat.constant(1.2f)) },
+            { setRangedDynamicValue(DynamicFloat.constant(3.4f)) },
         ),
         RANGED_VALUE_TYPE(
             { setRangedValueType(1) },
@@ -309,11 +309,11 @@
         RANGED_VALUE_EXPRESSION(
             {
                 setRangedValue(Random.nextFloat()) // Ignored when there's an expression.
-                    .setRangedValueExpression(DynamicFloat.constant(1.2f))
+                    .setRangedDynamicValue(DynamicFloat.constant(1.2f))
             },
             {
                 setRangedValue(Random.nextFloat()) // Ignored when there's an expression.
-                    .setRangedValueExpression(DynamicFloat.constant(3.4f))
+                    .setRangedDynamicValue(DynamicFloat.constant(3.4f))
             },
         ),
         RANGED_VALUE_NO_EXPRESSION(
diff --git a/wear/watchface/watchface-complications-data/src/test/java/android/support/wearable/complications/ComplicationDataTest.kt b/wear/watchface/watchface-complications-data/src/test/java/android/support/wearable/complications/ComplicationDataTest.kt
index 588241b..236d89f 100644
--- a/wear/watchface/watchface-complications-data/src/test/java/android/support/wearable/complications/ComplicationDataTest.kt
+++ b/wear/watchface/watchface-complications-data/src/test/java/android/support/wearable/complications/ComplicationDataTest.kt
@@ -93,7 +93,7 @@
         // WHEN the relevant getters are called on the resulting data
         // THEN the correct values are returned.
         Assert.assertEquals(data.rangedValue, 57f, 0f)
-        Assert.assertNull(data.rangedValueExpression)
+        Assert.assertNull(data.rangedDynamicValue)
         Assert.assertEquals(data.rangedMinValue, 5f, 0f)
         Assert.assertEquals(data.rangedMaxValue, 150f, 0f)
         assertThat(data.shortTitle!!.getTextAt(mResources, 0)).isEqualTo("title")
@@ -105,7 +105,7 @@
         // GIVEN complication data of the RANGED_VALUE type created by the Builder...
         val data =
             ComplicationData.Builder(ComplicationData.TYPE_RANGED_VALUE)
-                .setRangedValueExpression(DynamicFloat.constant(20f))
+                .setRangedDynamicValue(DynamicFloat.constant(20f))
                 .setRangedMinValue(5f)
                 .setRangedMaxValue(150f)
                 .setShortTitle(plainText("title"))
@@ -114,7 +114,7 @@
 
         // WHEN the relevant getters are called on the resulting data
         // THEN the correct values are returned.
-        assertThat(data.rangedValueExpression?.toDynamicFloatByteArray())
+        assertThat(data.rangedDynamicValue?.toDynamicFloatByteArray())
             .isEqualTo(DynamicFloat.constant(20f).toDynamicFloatByteArray())
         Assert.assertEquals(data.rangedMinValue, 5f, 0f)
         Assert.assertEquals(data.rangedMaxValue, 150f, 0f)
@@ -1074,10 +1074,10 @@
         assertThat(entry.placeholder!!.type).isEqualTo(ComplicationData.TYPE_LONG_TEXT)
     }
 
-    enum class HasExpressionWithExpressionScenario(val data: ComplicationData) {
+    enum class HasDynamicValuesWithDynamicValueScenario(val data: ComplicationData) {
         RANGED_VALUE(
             ComplicationData.Builder(ComplicationData.TYPE_NO_DATA)
-                .setRangedValueExpression(DynamicFloat.constant(1f))
+                .setRangedDynamicValue(DynamicFloat.constant(1f))
                 .build()
         ),
         LONG_TEXT(
@@ -1108,18 +1108,18 @@
     }
 
     @Test
-    fun hasExpression_withExpression_returnsTrue() {
-        for (scenario in HasExpressionWithExpressionScenario.values()) {
-            expect.withMessage(scenario.name).that(scenario.data.hasExpression()).isTrue()
+    fun hasDynamicValue_withDynamicValue_returnsTrue() {
+        for (scenario in HasDynamicValuesWithDynamicValueScenario.values()) {
+            expect.withMessage(scenario.name).that(scenario.data.hasDynamicValues()).isTrue()
         }
     }
 
     @Test
-    fun hasExpression_withoutExpression_returnsFalse() {
+    fun hasDynamicValue_withoutDynamicValue_returnsFalse() {
         val data =
             ComplicationData.Builder(ComplicationData.TYPE_NO_DATA).setRangedValue(10f).build()
 
-        assertThat(data.hasExpression()).isFalse()
+        assertThat(data.hasDynamicValues()).isFalse()
     }
 
     private companion object {
diff --git a/wear/watchface/watchface-complications-data/src/test/java/android/support/wearable/complications/ComplicationTextTest.kt b/wear/watchface/watchface-complications-data/src/test/java/android/support/wearable/complications/ComplicationTextTest.kt
index 3410cb5..e73090a 100644
--- a/wear/watchface/watchface-complications-data/src/test/java/android/support/wearable/complications/ComplicationTextTest.kt
+++ b/wear/watchface/watchface-complications-data/src/test/java/android/support/wearable/complications/ComplicationTextTest.kt
@@ -50,16 +50,16 @@
             .addEqualityGroup(dup { ComplicationText("surrounding", timeFormat("%h")) })
             .addEqualityGroup(dup { ComplicationText("surrounding 2", timeFormat("%h")) })
             .addEqualityGroup(dup { ComplicationText("surrounding", timeFormat("%m")) })
-            .addEqualityGroup(dup { ComplicationText(DynamicString.constant("expression")) })
-            .addEqualityGroup(dup { ComplicationText(DynamicString.constant("expression 2")) })
+            .addEqualityGroup(dup { ComplicationText(DynamicString.constant("dynamic")) })
+            .addEqualityGroup(dup { ComplicationText(DynamicString.constant("dynamic 2")) })
             .addEqualityGroup(
-                dup { ComplicationText("surrounding", DynamicString.constant("expression")) }
+                dup { ComplicationText("surrounding", DynamicString.constant("dynamic")) }
             )
             .addEqualityGroup(
-                dup { ComplicationText("surrounding 2", DynamicString.constant("expression")) }
+                dup { ComplicationText("surrounding 2", DynamicString.constant("dynamic")) }
             )
             .addEqualityGroup(
-                dup { ComplicationText("surrounding", DynamicString.constant("expression 2")) }
+                dup { ComplicationText("surrounding", DynamicString.constant("dynamic 2")) }
             )
             .testEquals()
     }
@@ -680,14 +680,14 @@
     }
 
     @Test
-    public fun expressionToParcelRoundTrip() {
+    public fun dynamicStringToParcelRoundTrip() {
         val text = ComplicationText(DynamicString.constant("hello"))
 
         Truth.assertThat(text.toParcelRoundTrip()).isEqualTo(text)
     }
 
     @Test
-    public fun getTextAt_ignoresStringExpressionIfSurroundingStringPresent() {
+    public fun getTextAt_ignoresDynamicStringIfSurroundingStringPresent() {
         val text = ComplicationText("hello" as CharSequence, DynamicString.constant("world"))
 
         Truth.assertThat(text.getTextAt(mResources, 132456789).toString()).isEqualTo("hello")
diff --git a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/DataTest.kt b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/DataTest.kt
index 356a70f..d975e3d 100644
--- a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/DataTest.kt
+++ b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/DataTest.kt
@@ -154,16 +154,16 @@
         assertThat(data.toString())
             .isEqualTo(
                 "ShortTextComplicationData(text=ComplicationText{mSurroundingText=text, " +
-                    "mTimeDependentText=null, mExpression=null}, title=ComplicationText{" +
-                    "mSurroundingText=title, mTimeDependentText=null, mExpression=null}, " +
+                    "mTimeDependentText=null, mDynamicText=null}, title=ComplicationText{" +
+                    "mSurroundingText=title, mTimeDependentText=null, mDynamicText=null}, " +
                     "monochromaticImage=null, smallImage=null, " +
                     "contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}, tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}, tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=1, " +
-                    "displayPolicy=1, fallback=null)"
+                    "displayPolicy=1, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -207,17 +207,17 @@
         assertThat(data.toString())
             .isEqualTo(
                 "ShortTextComplicationData(text=ComplicationText{mSurroundingText=text, " +
-                    "mTimeDependentText=null, mExpression=null}, title=ComplicationText{" +
-                    "mSurroundingText=title, mTimeDependentText=null, mExpression=null}, " +
+                    "mTimeDependentText=null, mDynamicText=null}, title=ComplicationText{" +
+                    "mSurroundingText=title, mTimeDependentText=null, mDynamicText=null}, " +
                     "monochromaticImage=MonochromaticImage(image=Icon(typ=URI uri=someuri), " +
                     "ambientImage=null), smallImage=SmallImage(image=Icon(typ=URI uri=someuri2), " +
                     "type=PHOTO, ambientImage=null), contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}, tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}, tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null)"
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -252,16 +252,16 @@
         assertThat(data.toString())
             .isEqualTo(
                 "LongTextComplicationData(text=ComplicationText{mSurroundingText=text, " +
-                    "mTimeDependentText=null, mExpression=null}, title=ComplicationText{" +
-                    "mSurroundingText=title, mTimeDependentText=null, mExpression=null}, " +
+                    "mTimeDependentText=null, mDynamicText=null}, title=ComplicationText{" +
+                    "mSurroundingText=title, mTimeDependentText=null, mDynamicText=null}, " +
                     "monochromaticImage=null, smallImage=null, " +
                     "contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null)"
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -305,18 +305,18 @@
         assertThat(data.toString())
             .isEqualTo(
                 "LongTextComplicationData(text=ComplicationText{mSurroundingText=text, " +
-                    "mTimeDependentText=null, mExpression=null}, " +
+                    "mTimeDependentText=null, mDynamicText=null}, " +
                     "title=ComplicationText{mSurroundingText=title, mTimeDependentText=null, " +
-                    "mExpression=null}, monochromaticImage=MonochromaticImage(" +
+                    "mDynamicText=null}, monochromaticImage=MonochromaticImage(" +
                     "image=Icon(typ=URI uri=someuri), ambientImage=null), smallImage=SmallImage(" +
                     "image=Icon(typ=URI uri=someuri2), type=PHOTO, ambientImage=null), " +
                     "contentDescription=ComplicationText{mSurroundingText=content description, " +
-                    "mTimeDependentText=null, mExpression=null}), " +
+                    "mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null)"
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -351,23 +351,23 @@
         assertThat(deserialized.max).isEqualTo(100f)
         assertThat(deserialized.min).isEqualTo(0f)
         assertThat(deserialized.value).isEqualTo(95f)
-        assertThat(deserialized.valueExpression).isNull()
+        assertThat(deserialized.dynamicValue).isNull()
         assertThat(deserialized.contentDescription!!.getTextAt(resources, Instant.EPOCH))
             .isEqualTo("content description")
         assertThat(deserialized.title!!.getTextAt(resources, Instant.EPOCH)).isEqualTo("battery")
 
         assertThat(data.toString())
             .isEqualTo(
-                "RangedValueComplicationData(value=95.0, valueExpression=null, valueType=0, " +
+                "RangedValueComplicationData(value=95.0, dynamicValue=null, valueType=0, " +
                     "min=0.0, max=100.0, monochromaticImage=null, smallImage=null, " +
                     "title=ComplicationText{mSurroundingText=battery, mTimeDependentText=null, " +
-                    "mExpression=null}, text=null, contentDescription=ComplicationText{" +
+                    "mDynamicText=null}, text=null, contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, colorRamp=null, " +
-                    "persistencePolicy=0, displayPolicy=0, fallback=null)"
+                    "persistencePolicy=0, displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -375,7 +375,8 @@
     public fun rangedValueComplicationData_withValueExpression() {
         val data =
             RangedValueComplicationData.Builder(
-                    valueExpression = DynamicFloat.constant(20f),
+                    dynamicValue = DynamicFloat.constant(20f),
+                    fallbackValue = 5f,
                     min = 5f,
                     max = 100f,
                     contentDescription = "content description".complicationText
@@ -386,7 +387,7 @@
         ParcelableSubject.assertThat(data.asWireComplicationData())
             .hasSameSerializationAs(
                 WireComplicationData.Builder(WireComplicationData.TYPE_RANGED_VALUE)
-                    .setRangedValueExpression(DynamicFloat.constant(20f))
+                    .setRangedDynamicValue(DynamicFloat.constant(20f))
                     .setRangedValue(5f) // min as a sensible default
                     .setRangedValueType(RangedValueComplicationData.TYPE_UNDEFINED)
                     .setRangedMinValue(5f)
@@ -402,9 +403,9 @@
         val deserialized = serializeAndDeserialize(data) as RangedValueComplicationData
         assertThat(deserialized.max).isEqualTo(100f)
         assertThat(deserialized.min).isEqualTo(5f)
-        assertThat(deserialized.valueExpression?.toDynamicFloatByteArray())
+        assertThat(deserialized.dynamicValue?.toDynamicFloatByteArray())
             .isEqualTo(DynamicFloat.constant(20f).toDynamicFloatByteArray())
-        assertThat(deserialized.value).isEqualTo(5f) // min as a sensible default
+        assertThat(deserialized.value).isEqualTo(5f) // Fallback.
         assertThat(deserialized.contentDescription!!.getTextAt(resources, Instant.EPOCH))
             .isEqualTo("content description")
         assertThat(deserialized.title!!.getTextAt(resources, Instant.EPOCH)).isEqualTo("battery")
@@ -412,16 +413,16 @@
         assertThat(data.toString())
             .isEqualTo(
                 "RangedValueComplicationData(value=5.0, " +
-                    "valueExpression=FixedFloat{value=20.0}, valueType=0, min=5.0, " +
+                    "dynamicValue=FixedFloat{value=20.0}, valueType=0, min=5.0, " +
                     "max=100.0, monochromaticImage=null, smallImage=null, title=ComplicationText{" +
-                    "mSurroundingText=battery, mTimeDependentText=null, mExpression=null}, " +
+                    "mSurroundingText=battery, mTimeDependentText=null, mDynamicText=null}, " +
                     "text=null, contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), dataSource=" +
                     "ComponentInfo{com.pkg_a/com.a}, colorRamp=null, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null)"
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -434,7 +435,7 @@
                     max = 100f,
                     contentDescription = "content description".complicationText
                 )
-                .setTitle(ComplicationTextExpression(DynamicString.constant("title")))
+                .setTitle(DynamicComplicationText(DynamicString.constant("title"), "fallback"))
                 .setDataSource(dataSource)
                 .build()
         ParcelableSubject.assertThat(data.asWireComplicationData())
@@ -444,7 +445,9 @@
                     .setRangedValueType(RangedValueComplicationData.TYPE_UNDEFINED)
                     .setRangedMinValue(0f)
                     .setRangedMaxValue(100f)
-                    .setShortTitle(WireComplicationText(DynamicString.constant("title")))
+                    .setShortTitle(
+                        WireComplicationText("fallback", DynamicString.constant("title"))
+                    )
                     .setContentDescription(WireComplicationText.plainText("content description"))
                     .setDataSource(dataSource)
                     .setPersistencePolicy(ComplicationPersistencePolicies.CACHING_ALLOWED)
@@ -461,17 +464,17 @@
 
         assertThat(data.toString())
             .isEqualTo(
-                "RangedValueComplicationData(value=95.0, valueExpression=null, valueType=0, " +
+                "RangedValueComplicationData(value=95.0, dynamicValue=null, valueType=0, " +
                     "min=0.0, max=100.0, monochromaticImage=null, smallImage=null, " +
-                    "title=ComplicationText{mSurroundingText=(null), mTimeDependentText=null, " +
-                    "mExpression=FixedString{value=title}}, text=null, " +
+                    "title=ComplicationText{mSurroundingText=fallback, mTimeDependentText=null, " +
+                    "mDynamicText=FixedString{value=title}}, text=null, " +
                     "contentDescription=ComplicationText{mSurroundingText=content description, " +
-                    "mTimeDependentText=null, mExpression=null}), " +
+                    "mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, colorRamp=null, " +
-                    "persistencePolicy=0, displayPolicy=0, fallback=null)"
+                    "persistencePolicy=0, displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -522,20 +525,20 @@
 
         assertThat(data.toString())
             .isEqualTo(
-                "RangedValueComplicationData(value=95.0, valueExpression=null, " +
+                "RangedValueComplicationData(value=95.0, dynamicValue=null, " +
                     "valueType=1, min=0.0, max=100.0, " +
                     "monochromaticImage=MonochromaticImage(image=Icon(typ=URI uri=someuri), " +
                     "ambientImage=null), smallImage=SmallImage(image=Icon(typ=URI uri=someuri2), " +
                     "type=PHOTO, ambientImage=null), " +
                     "title=ComplicationText{mSurroundingText=battery, " +
-                    "mTimeDependentText=null, mExpression=null}, text=null, " +
+                    "mTimeDependentText=null, mDynamicText=null}, text=null, " +
                     "contentDescription=ComplicationText{mSurroundingText=content description, " +
-                    "mTimeDependentText=null, mExpression=null}), " +
+                    "mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, colorRamp=null, " +
-                    "persistencePolicy=0, displayPolicy=0, fallback=null)"
+                    "persistencePolicy=0, displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -565,7 +568,7 @@
         testRoundTripConversions(data)
         val deserialized = serializeAndDeserialize(data) as GoalProgressComplicationData
         assertThat(deserialized.value).isEqualTo(1200f)
-        assertThat(deserialized.valueExpression).isNull()
+        assertThat(deserialized.dynamicValue).isNull()
         assertThat(deserialized.targetValue).isEqualTo(10000f)
         assertThat(deserialized.contentDescription!!.getTextAt(resources, Instant.EPOCH))
             .isEqualTo("content description")
@@ -573,16 +576,16 @@
 
         assertThat(data.toString())
             .isEqualTo(
-                "GoalProgressComplicationData(value=1200.0, valueExpression=null, " +
+                "GoalProgressComplicationData(value=1200.0, dynamicValue=null, " +
                     "targetValue=10000.0, monochromaticImage=null, smallImage=null, " +
                     "title=ComplicationText{mSurroundingText=steps, mTimeDependentText=null, " +
-                    "mExpression=null}, text=null, contentDescription=ComplicationText{" +
+                    "mDynamicText=null}, text=null, contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, colorRamp=null, " +
-                    "persistencePolicy=0, displayPolicy=0, fallback=null)"
+                    "persistencePolicy=0, displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -590,7 +593,8 @@
     public fun goalProgressComplicationData_withValueExpression() {
         val data =
             GoalProgressComplicationData.Builder(
-                    valueExpression = DynamicFloat.constant(10f),
+                    dynamicValue = DynamicFloat.constant(10f),
+                    fallbackValue = 0f,
                     targetValue = 10000f,
                     contentDescription = "content description".complicationText
                 )
@@ -600,7 +604,7 @@
         ParcelableSubject.assertThat(data.asWireComplicationData())
             .hasSameSerializationAs(
                 WireComplicationData.Builder(WireComplicationData.TYPE_GOAL_PROGRESS)
-                    .setRangedValueExpression(DynamicFloat.constant(10f))
+                    .setRangedDynamicValue(DynamicFloat.constant(10f))
                     .setRangedValue(0f) // sensible default
                     .setTargetValue(10000f)
                     .setShortTitle(WireComplicationText.plainText("steps"))
@@ -612,9 +616,9 @@
             )
         testRoundTripConversions(data)
         val deserialized = serializeAndDeserialize(data) as GoalProgressComplicationData
-        assertThat(deserialized.valueExpression?.toDynamicFloatByteArray())
+        assertThat(deserialized.dynamicValue?.toDynamicFloatByteArray())
             .isEqualTo(DynamicFloat.constant(10f).toDynamicFloatByteArray())
-        assertThat(deserialized.value).isEqualTo(0f) // sensible default
+        assertThat(deserialized.value).isEqualTo(0f) // Fallback.
         assertThat(deserialized.targetValue).isEqualTo(10000f)
         assertThat(deserialized.contentDescription!!.getTextAt(resources, Instant.EPOCH))
             .isEqualTo("content description")
@@ -622,18 +626,18 @@
 
         assertThat(data.toString())
             .isEqualTo(
-                "GoalProgressComplicationData(value=0.0, valueExpression=" +
+                "GoalProgressComplicationData(value=0.0, dynamicValue=" +
                     "FixedFloat{value=10.0}, targetValue=10000.0, " +
                     "monochromaticImage=null, smallImage=null, title=ComplicationText{" +
-                    "mSurroundingText=steps, mTimeDependentText=null, mExpression=null}, " +
+                    "mSurroundingText=steps, mTimeDependentText=null, mDynamicText=null}, " +
                     "text=null, contentDescription=ComplicationText{mSurroundingText=content " +
-                    "description, mTimeDependentText=null, mExpression=null}), " +
+                    "description, mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(" +
                     "startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, colorRamp=null, " +
-                    "persistencePolicy=0, displayPolicy=0, fallback=null)"
+                    "persistencePolicy=0, displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -673,17 +677,18 @@
 
         assertThat(data.toString())
             .isEqualTo(
-                "GoalProgressComplicationData(value=1200.0, valueExpression=null, " +
+                "GoalProgressComplicationData(value=1200.0, dynamicValue=null, " +
                     "targetValue=10000.0, monochromaticImage=null, smallImage=null, " +
                     "title=ComplicationText{mSurroundingText=steps, mTimeDependentText=null, " +
-                    "mExpression=null}, text=null, contentDescription=ComplicationText{" +
+                    "mDynamicText=null}, text=null, contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, " +
                     "colorRamp=ColorRamp(colors=[-65536, -16711936, -16776961], " +
-                    "interpolated=true), persistencePolicy=0, displayPolicy=0, fallback=null)"
+                    "interpolated=true), persistencePolicy=0, displayPolicy=0, " +
+                    "dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -732,21 +737,22 @@
 
         assertThat(data.toString())
             .isEqualTo(
-                "GoalProgressComplicationData(value=1200.0, valueExpression=null, " +
+                "GoalProgressComplicationData(value=1200.0, dynamicValue=null, " +
                     "targetValue=10000.0, " +
                     "monochromaticImage=MonochromaticImage(image=Icon(typ=URI uri=someuri), " +
                     "ambientImage=null), smallImage=SmallImage(image=Icon(typ=URI uri=someuri2), " +
                     "type=PHOTO, ambientImage=null), " +
                     "title=ComplicationText{mSurroundingText=steps, " +
-                    "mTimeDependentText=null, mExpression=null}, text=null, " +
+                    "mTimeDependentText=null, mDynamicText=null}, text=null, " +
                     "contentDescription=ComplicationText{mSurroundingText=content description, " +
-                    "mTimeDependentText=null, mExpression=null}), " +
+                    "mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, " +
                     "colorRamp=ColorRamp(colors=[-65536, -16711936, -16776961], " +
-                    "interpolated=true), persistencePolicy=0, displayPolicy=0, fallback=null)"
+                    "interpolated=true), persistencePolicy=0, displayPolicy=0, " +
+                    "dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -790,18 +796,19 @@
 
         assertThat(data.toString())
             .isEqualTo(
-                "RangedValueComplicationData(value=95.0, valueExpression=null, " +
+                "RangedValueComplicationData(value=95.0, dynamicValue=null, " +
                     "valueType=0, min=0.0, max=100.0, " +
                     "monochromaticImage=null, smallImage=null, title=ComplicationText{" +
-                    "mSurroundingText=battery, mTimeDependentText=null, mExpression=null}, " +
+                    "mSurroundingText=battery, mTimeDependentText=null, mDynamicText=null}, " +
                     "text=null, contentDescription=ComplicationText{mSurroundingText=content " +
-                    "description, mTimeDependentText=null, mExpression=null}), " +
+                    "description, mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, " +
                     "colorRamp=ColorRamp(colors=[-65536, -16711936, -16776961], " +
-                    "interpolated=true), persistencePolicy=0, displayPolicy=0, fallback=null)"
+                    "interpolated=true), persistencePolicy=0, displayPolicy=0, " +
+                    "dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -868,13 +875,13 @@
                     "Element(color=-16711936, weight=1.0), Element(color=-16776961, weight=2.0), " +
                     "elementBackgroundColor=-7829368, monochromaticImage=null, smallImage=null, " +
                     "title=ComplicationText{mSurroundingText=calories, mTimeDependentText=null, " +
-                    "mExpression=null}, text=null, contentDescription=ComplicationText{" +
+                    "mDynamicText=null}, text=null, contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null)"
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -936,14 +943,14 @@
                     "image=Icon(typ=URI uri=someuri), ambientImage=null), " +
                     "smallImage=SmallImage(image=Icon(typ=URI uri=someuri2), type=PHOTO, " +
                     "ambientImage=null), title=ComplicationText{mSurroundingText=calories, " +
-                    "mTimeDependentText=null, mExpression=null}, text=null, " +
+                    "mTimeDependentText=null, mDynamicText=null}, text=null, " +
                     "contentDescription=ComplicationText{mSurroundingText=content description, " +
-                    "mTimeDependentText=null, mExpression=null}), " +
+                    "mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null)"
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -979,11 +986,11 @@
                     "image=Icon(typ=URI uri=someuri), ambientImage=null), contentDescription=" +
                     "ComplicationText{mSurroundingText=content description, " +
                     "mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null)"
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -1018,12 +1025,12 @@
                 "SmallImageComplicationData(smallImage=SmallImage(image=Icon(" +
                     "typ=URI uri=someuri), type=PHOTO, ambientImage=null), " +
                     "contentDescription=ComplicationText{mSurroundingText=content description, " +
-                    "mTimeDependentText=null, mExpression=null}), " +
+                    "mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null)"
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -1089,12 +1096,12 @@
             .isEqualTo(
                 "PhotoImageComplicationData(photoImage=Icon(typ=URI uri=someuri), " +
                     "contentDescription=ComplicationText{mSurroundingText=content description, " +
-                    "mTimeDependentText=null, mExpression=null}), " +
+                    "mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null)"
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
     }
 
@@ -1123,7 +1130,7 @@
             .isEqualTo(
                 "NoPermissionComplicationData(text=ComplicationText{" +
                     "mSurroundingText=needs location, " +
-                    "mTimeDependentText=null, mExpression=null}, title=null, " +
+                    "mTimeDependentText=null, mDynamicText=null}, title=null, " +
                     "monochromaticImage=null, smallImage=null, " +
                     "tapActionLostDueToSerialization=false, " +
                     "tapAction=null, validTimeRange=TimeRange(startDateTimeMillis=" +
@@ -1163,7 +1170,7 @@
             .isEqualTo(
                 "NoPermissionComplicationData(text=ComplicationText{" +
                     "mSurroundingText=needs location, mTimeDependentText=null, " +
-                    "mExpression=null}, title=null, monochromaticImage=MonochromaticImage(" +
+                    "mDynamicText=null}, title=null, monochromaticImage=MonochromaticImage(" +
                     "image=Icon(typ=URI uri=someuri), ambientImage=null), smallImage=SmallImage(" +
                     "image=Icon(typ=URI uri=someuri2), type=PHOTO, ambientImage=null), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
@@ -1217,17 +1224,17 @@
             .isEqualTo(
                 "NoDataComplicationData(placeholder=ShortTextComplicationData(text=" +
                     "ComplicationText{mSurroundingText=__placeholder__, mTimeDependentText=null, " +
-                    "mExpression=null}, title=ComplicationText{" +
+                    "mDynamicText=null}, title=ComplicationText{" +
                     "mSurroundingText=__placeholder__, mTimeDependentText=null, " +
-                    "mExpression=null}, monochromaticImage=MonochromaticImage(" +
+                    "mDynamicText=null}, monochromaticImage=MonochromaticImage(" +
                     "image=Icon(typ=RESOURCE pkg= id=0xffffffff), ambientImage=null), " +
                     "smallImage=null, contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}, tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}, tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null), " +
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
@@ -1273,14 +1280,14 @@
             .isEqualTo(
                 "NoDataComplicationData(placeholder=LongTextComplicationData(" +
                     "text=ComplicationText{mSurroundingText=text, mTimeDependentText=null, " +
-                    "mExpression=null}, title=null, monochromaticImage=null, smallImage=null, " +
+                    "mDynamicText=null}, title=null, monochromaticImage=null, smallImage=null, " +
                     "contentDescription=ComplicationText{mSurroundingText=content description, " +
-                    "mTimeDependentText=null, mExpression=null}), " +
+                    "mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null), " +
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
@@ -1332,17 +1339,17 @@
         assertThat(data.toString())
             .isEqualTo(
                 "NoDataComplicationData(placeholder=RangedValueComplicationData(" +
-                    "value=3.4028235E38, valueExpression=null, valueType=0, min=0.0, max=100.0, " +
+                    "value=3.4028235E38, dynamicValue=null, valueType=0, min=0.0, max=100.0, " +
                     "monochromaticImage=null, smallImage=null, title=null, text=ComplicationText{" +
                     "mSurroundingText=__placeholder__, mTimeDependentText=null, " +
-                    "mExpression=null}, contentDescription=ComplicationText{" +
+                    "mDynamicText=null}, contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, colorRamp=null, " +
                     "persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null), " +
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
@@ -1394,17 +1401,18 @@
         assertThat(data.toString())
             .isEqualTo(
                 "NoDataComplicationData(placeholder=GoalProgressComplicationData(" +
-                    "value=3.4028235E38, valueExpression=null, targetValue=10000.0, " +
+                    "value=3.4028235E38, dynamicValue=null, targetValue=10000.0, " +
                     "monochromaticImage=null, smallImage=null, title=null, text=ComplicationText{" +
                     "mSurroundingText=__placeholder__, mTimeDependentText=null, " +
-                    "mExpression=null}, contentDescription=ComplicationText{" +
+                    "mDynamicText=null}, contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, " +
                     "colorRamp=ColorRamp(colors=[-65536, -16711936, -16776961], " +
-                    "interpolated=false), persistencePolicy=0, displayPolicy=0, fallback=null), " +
+                    "interpolated=false), persistencePolicy=0, displayPolicy=0, " +
+                    "dynamicValueInvalidationFallback=null), " +
                     "tapActionLostDueToSerialization=false, " +
                     "tapAction=null, validTimeRange=TimeRange(startDateTimeMillis=" +
                     "-1000000000-01-01T00:00:00Z, " +
@@ -1463,13 +1471,13 @@
                     "weight=1.0), Element(color=-16776961, weight=2.0), " +
                     "elementBackgroundColor=-7829368, monochromaticImage=null, smallImage=null, " +
                     "title=ComplicationText{mSurroundingText=calories, mTimeDependentText=null, " +
-                    "mExpression=null}, text=null, contentDescription=ComplicationText{" +
+                    "mDynamicText=null}, text=null, contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null), " +
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
@@ -1525,18 +1533,18 @@
         assertThat(data.toString())
             .isEqualTo(
                 "NoDataComplicationData(placeholder=RangedValueComplicationData(" +
-                    "value=3.4028235E38, valueExpression=null, valueType=1, min=0.0, max=100.0, " +
+                    "value=3.4028235E38, dynamicValue=null, valueType=1, min=0.0, max=100.0, " +
                     "monochromaticImage=null, smallImage=null, title=null, text=ComplicationText{" +
                     "mSurroundingText=__placeholder__, mTimeDependentText=null, " +
-                    "mExpression=null}, contentDescription=ComplicationText{" +
+                    "mDynamicText=null}, contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, " +
                     "colorRamp=ColorRamp(colors=[-65536, -16711936, -16776961], " +
                     "interpolated=true), persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null), " +
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
@@ -1584,11 +1592,11 @@
                     "monochromaticImage=MonochromaticImage(image=Icon(typ=RESOURCE pkg= " +
                     "id=0xffffffff), ambientImage=null), contentDescription=ComplicationText{" +
                     "mSurroundingText=content description, mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null), " +
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
@@ -1636,12 +1644,12 @@
                 "NoDataComplicationData(placeholder=SmallImageComplicationData(smallImage=" +
                     "SmallImage(image=Icon(typ=RESOURCE pkg= id=0xffffffff), type=ICON, " +
                     "ambientImage=null), contentDescription=ComplicationText{mSurroundingText=" +
-                    "content description, mTimeDependentText=null, mExpression=null}), " +
+                    "content description, mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null), " +
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
@@ -1688,12 +1696,12 @@
                 "NoDataComplicationData(placeholder=PhotoImageComplicationData(" +
                     "photoImage=Icon(typ=RESOURCE pkg= id=0xffffffff), " +
                     "contentDescription=ComplicationText{mSurroundingText=content description, " +
-                    "mTimeDependentText=null, mExpression=null}), " +
+                    "mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
                     "dataSource=ComponentInfo{com.pkg_a/com.a}, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null), " +
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(startDateTimeMillis=-1000000000-01-01T00:00:00Z, " +
                     "endDateTimeMillis=+1000000000-12-31T23:59:59.999999999Z), " +
@@ -1801,7 +1809,7 @@
     public fun rangedValueComplicationData_withValueExpression() {
         assertRoundtrip(
             WireComplicationData.Builder(WireComplicationData.TYPE_RANGED_VALUE)
-                .setRangedValueExpression(DynamicFloat.constant(10f))
+                .setRangedDynamicValue(DynamicFloat.constant(10f))
                 .setRangedMinValue(0f)
                 .setRangedMaxValue(100f)
                 .setShortTitle(WireComplicationText.plainText("battery"))
@@ -1850,7 +1858,7 @@
     public fun goalProgressComplicationData_withValueExpression() {
         assertRoundtrip(
             WireComplicationData.Builder(WireComplicationData.TYPE_GOAL_PROGRESS)
-                .setRangedValueExpression(DynamicFloat.constant(10f))
+                .setRangedDynamicValue(DynamicFloat.constant(10f))
                 .setTargetValue(10000f)
                 .setShortTitle(WireComplicationText.plainText("steps"))
                 .setContentDescription(WireComplicationText.plainText("content description"))
@@ -2857,14 +2865,14 @@
         assertThat(data.toString())
             .isEqualTo(
                 "ShortTextComplicationData(text=ComplicationText{mSurroundingText=REDACTED, " +
-                    "mTimeDependentText=null, mExpression=null}, title=ComplicationText{" +
-                    "mSurroundingText=REDACTED, mTimeDependentText=null, mExpression=null}, " +
+                    "mTimeDependentText=null, mDynamicText=null}, title=ComplicationText{" +
+                    "mSurroundingText=REDACTED, mTimeDependentText=null, mDynamicText=null}, " +
                     "monochromaticImage=null, smallImage=null, " +
                     "contentDescription=ComplicationText{" +
-                    "mSurroundingText=REDACTED, mTimeDependentText=null, mExpression=null}, " +
+                    "mSurroundingText=REDACTED, mTimeDependentText=null, mDynamicText=null}, " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(REDACTED), dataSource=null, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null)"
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
         assertThat(data.asWireComplicationData().toString())
             .isEqualTo("ComplicationData{mType=3, mFields=REDACTED}")
@@ -2883,14 +2891,14 @@
         assertThat(data.toString())
             .isEqualTo(
                 "LongTextComplicationData(text=ComplicationText{mSurroundingText=REDACTED, " +
-                    "mTimeDependentText=null, mExpression=null}, title=ComplicationText{" +
-                    "mSurroundingText=REDACTED, mTimeDependentText=null, mExpression=null}, " +
+                    "mTimeDependentText=null, mDynamicText=null}, title=ComplicationText{" +
+                    "mSurroundingText=REDACTED, mTimeDependentText=null, mDynamicText=null}, " +
                     "monochromaticImage=null, smallImage=null, " +
                     "contentDescription=ComplicationText{" +
-                    "mSurroundingText=REDACTED, mTimeDependentText=null, mExpression=null}), " +
+                    "mSurroundingText=REDACTED, mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(REDACTED), dataSource=null, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null)"
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
         assertThat(data.asWireComplicationData().toString())
             .isEqualTo("ComplicationData{mType=4, mFields=REDACTED}")
@@ -2911,15 +2919,15 @@
 
         assertThat(data.toString())
             .isEqualTo(
-                "RangedValueComplicationData(value=REDACTED, valueExpression=REDACTED, " +
+                "RangedValueComplicationData(value=REDACTED, dynamicValue=REDACTED, " +
                     "valueType=0, min=0.0, max=100.0, monochromaticImage=null, smallImage=null, " +
                     "title=ComplicationText{mSurroundingText=REDACTED, mTimeDependentText=null, " +
-                    "mExpression=null}, text=ComplicationText{mSurroundingText=REDACTED, " +
-                    "mTimeDependentText=null, mExpression=null}, contentDescription=" +
+                    "mDynamicText=null}, text=ComplicationText{mSurroundingText=REDACTED, " +
+                    "mTimeDependentText=null, mDynamicText=null}, contentDescription=" +
                     "ComplicationText{mSurroundingText=REDACTED, mTimeDependentText=null, " +
-                    "mExpression=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
+                    "mDynamicText=null}), tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(REDACTED), dataSource=null, colorRamp=null, " +
-                    "persistencePolicy=0, displayPolicy=0, fallback=null)"
+                    "persistencePolicy=0, displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
         assertThat(data.asWireComplicationData().toString())
             .isEqualTo("ComplicationData{mType=5, mFields=REDACTED}")
@@ -2940,15 +2948,15 @@
 
         assertThat(data.toString())
             .isEqualTo(
-                "GoalProgressComplicationData(value=REDACTED, valueExpression=REDACTED, " +
+                "GoalProgressComplicationData(value=REDACTED, dynamicValue=REDACTED, " +
                     "targetValue=10000.0, monochromaticImage=null, smallImage=null, " +
                     "title=ComplicationText{mSurroundingText=REDACTED, mTimeDependentText=null, " +
-                    "mExpression=null}, text=null, contentDescription=ComplicationText{" +
-                    "mSurroundingText=REDACTED, mTimeDependentText=null, mExpression=null}), " +
+                    "mDynamicText=null}, text=null, contentDescription=ComplicationText{" +
+                    "mSurroundingText=REDACTED, mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, validTimeRange=" +
                     "TimeRange(REDACTED), dataSource=null, colorRamp=ColorRamp(colors=[-65536, " +
                     "-16711936, -16776961], interpolated=true), persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null)"
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null)"
             )
         assertThat(data.asWireComplicationData().toString())
             .isEqualTo("ComplicationData{mType=13, mFields=REDACTED}")
@@ -2970,12 +2978,12 @@
                 "NoDataComplicationData(placeholder=LongTextComplicationData(" +
                     "text=ComplicationText{mSurroundingText=__placeholder__, " +
                     "mTimeDependentText=null, " +
-                    "mExpression=null}, title=null, monochromaticImage=null, smallImage=null, " +
+                    "mDynamicText=null}, title=null, monochromaticImage=null, smallImage=null, " +
                     "contentDescription=ComplicationText{mSurroundingText=REDACTED, " +
-                    "mTimeDependentText=null, mExpression=null}), " +
+                    "mTimeDependentText=null, mDynamicText=null}), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(REDACTED), dataSource=null, persistencePolicy=0, " +
-                    "displayPolicy=0, fallback=null), " +
+                    "displayPolicy=0, dynamicValueInvalidationFallback=null), " +
                     "tapActionLostDueToSerialization=false, tapAction=null, " +
                     "validTimeRange=TimeRange(REDACTED), persistencePolicy=0, displayPolicy=0)"
             )
diff --git a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/DynamicComplicationDataEvaluatorTest.kt
similarity index 95%
rename from wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt
rename to wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/DynamicComplicationDataEvaluatorTest.kt
index 65d472b..18e7111 100644
--- a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt
+++ b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/DynamicComplicationDataEvaluatorTest.kt
@@ -28,7 +28,7 @@
 import androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue
 import androidx.wear.protolayout.expression.pipeline.StateStore
 import androidx.wear.protolayout.expression.pipeline.TimeGateway
-import androidx.wear.watchface.complications.data.ComplicationDataExpressionEvaluator.Companion.INVALID_DATA
+import androidx.wear.watchface.complications.data.DynamicComplicationDataEvaluator.Companion.INVALID_DATA
 import com.google.common.truth.Expect
 import com.google.common.truth.Truth.assertThat
 import java.time.Instant
@@ -51,7 +51,7 @@
 import org.robolectric.shadows.ShadowLog
 
 @RunWith(SharedRobolectricTestRunner::class)
-class ComplicationDataExpressionEvaluatorTest {
+class DynamicComplicationDataEvaluatorTest {
     @get:Rule val expect = Expect.create()
 
     @Before
@@ -63,7 +63,7 @@
     fun evaluate_noExpression_returnsUnevaluated() = runBlocking {
         val data = WireComplicationData.Builder(TYPE_NO_DATA).setRangedValue(10f).build()
 
-        val evaluator = ComplicationDataExpressionEvaluator()
+        val evaluator = DynamicComplicationDataEvaluator()
 
         assertThat(evaluator.evaluate(data).firstOrNull()).isEqualTo(data)
     }
@@ -82,7 +82,7 @@
         SET_IMMEDIATELY_WHEN_ALL_DATA_AVAILABLE(
             expressed =
                 WireComplicationData.Builder(TYPE_NO_DATA)
-                    .setRangedValueExpression(DynamicFloat.constant(1f))
+                    .setRangedDynamicValue(DynamicFloat.constant(1f))
                     .setLongText(WireComplicationText(DynamicString.constant("Long Text")))
                     .setLongTitle(WireComplicationText(DynamicString.constant("Long Title")))
                     .setShortText(WireComplicationText(DynamicString.constant("Short Text")))
@@ -113,7 +113,7 @@
         SET_ONLY_AFTER_ALL_FIELDS_EVALUATED(
             expressed =
                 WireComplicationData.Builder(TYPE_NO_DATA)
-                    .setRangedValueExpression(DynamicFloat.from(AppDataKey("ranged_value")))
+                    .setRangedDynamicValue(DynamicFloat.from(AppDataKey("ranged_value")))
                     .setLongText(WireComplicationText(DynamicString.from(AppDataKey("long_text"))))
                     .setLongTitle(
                         WireComplicationText(DynamicString.from(AppDataKey("long_title")))
@@ -295,7 +295,7 @@
             // Defensive copy due to in-place evaluation.
             val expressed = WireComplicationData.Builder(scenario.expressed).build()
             val stateStore = StateStore(mapOf())
-            val evaluator = ComplicationDataExpressionEvaluator(stateStore)
+            val evaluator = DynamicComplicationDataEvaluator(stateStore)
             val allEvaluations =
                 evaluator
                     .evaluate(expressed)
@@ -320,7 +320,7 @@
     fun evaluate_cancelled_cleansUp() = runBlocking {
         val expressed =
             WireComplicationData.Builder(TYPE_NO_DATA)
-                .setRangedValueExpression(
+                .setRangedDynamicValue(
                     // Uses TimeGateway, which needs cleaning up.
                     DynamicInstant.withSecondsPrecision(Instant.EPOCH)
                         .durationUntil(DynamicInstant.platformTimeWithSecondsPrecision())
@@ -329,7 +329,7 @@
                 )
                 .build()
         val timeGateway = mock<TimeGateway>()
-        val evaluator = ComplicationDataExpressionEvaluator(timeGateway = timeGateway)
+        val evaluator = DynamicComplicationDataEvaluator(timeGateway = timeGateway)
         val flow = evaluator.evaluate(expressed)
 
         // Validity check - TimeGateway not used until Flow collection.
@@ -351,7 +351,7 @@
     fun evaluate_keepExpression_doesNotTrimUnevaluatedExpression() = runBlocking {
         val expressed =
             WireComplicationData.Builder(TYPE_NO_DATA)
-                .setRangedValueExpression(DynamicFloat.constant(1f))
+                .setRangedDynamicValue(DynamicFloat.constant(1f))
                 .setLongText(WireComplicationText(DynamicString.constant("Long Text")))
                 .setLongTitle(WireComplicationText(DynamicString.constant("Long Title")))
                 .setShortText(WireComplicationText(DynamicString.constant("Short Text")))
@@ -361,13 +361,13 @@
                 .setListEntryCollection(listOf(constantData("List")))
                 .build()
                 .also { it.setTimelineEntryCollection(listOf(constantData("Timeline"))) }
-        val evaluator = ComplicationDataExpressionEvaluator(keepExpression = true)
+        val evaluator = DynamicComplicationDataEvaluator(keepDynamicValues = true)
 
         assertThat(evaluator.evaluate(expressed).firstOrNull())
             .isEqualTo(
                 WireComplicationData.Builder(TYPE_NO_DATA)
                     .setRangedValue(1f)
-                    .setRangedValueExpression(DynamicFloat.constant(1f))
+                    .setRangedDynamicValue(DynamicFloat.constant(1f))
                     .setLongText(
                         WireComplicationText("Long Text", DynamicString.constant("Long Text"))
                     )
@@ -399,7 +399,7 @@
                 .setShortText(WireComplicationText("Text"))
                 .setPlaceholder(evaluatedData("Placeholder"))
                 .build()
-        val evaluator = ComplicationDataExpressionEvaluator(keepExpression = true)
+        val evaluator = DynamicComplicationDataEvaluator(keepDynamicValues = true)
 
         assertThat(evaluator.evaluate(expressed).firstOrNull())
             .isEqualTo(
diff --git a/window/extensions/extensions/lint-baseline.xml b/window/extensions/extensions/lint-baseline.xml
deleted file mode 100644
index 1ab80d6..0000000
--- a/window/extensions/extensions/lint-baseline.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.1.0-alpha07">
-
-    <issue
-        id="BanHideAnnotation"
-        message="@hide is not allowed in Javadoc"
-        errorLine1="    @interface WindowAreaStatus {}"
-        errorLine2="               ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/window/extensions/area/WindowAreaComponent.java"/>
-    </issue>
-
-    <issue
-        id="BanHideAnnotation"
-        message="@hide is not allowed in Javadoc"
-        errorLine1="    @interface WindowAreaSessionState {}"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/window/extensions/area/WindowAreaComponent.java"/>
-    </issue>
-
-    <issue
-        id="BanHideAnnotation"
-        message="@hide is not allowed in Javadoc"
-        errorLine1="    int INVALID_VENDOR_API_LEVEL = -1;"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/window/extensions/WindowExtensions.java"/>
-    </issue>
-
-    <issue
-        id="BanHideAnnotation"
-        message="@hide is not allowed in Javadoc"
-        errorLine1="    int VENDOR_API_LEVEL_1 = 1;"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/window/extensions/WindowExtensions.java"/>
-    </issue>
-
-    <issue
-        id="BanHideAnnotation"
-        message="@hide is not allowed in Javadoc"
-        errorLine1="    int VENDOR_API_LEVEL_2 = 2;"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/window/extensions/WindowExtensions.java"/>
-    </issue>
-
-</issues>
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java
index 240e2dc..e34b0e5 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java
@@ -36,7 +36,6 @@
     // TODO(b/241323716) Removed after we have annotation to check API level
     /**
      * An invalid {@link #getVendorApiLevel vendor API level}
-     * @hide
      */
     @RestrictTo(LIBRARY_GROUP)
     int INVALID_VENDOR_API_LEVEL = -1;
@@ -58,7 +57,6 @@
      *     <li>{@link androidx.window.extensions.layout.WindowLayoutComponent} APIs</li>
      * </ul>
      * </p>
-     * @hide
      */
     @RestrictTo(LIBRARY_GROUP)
     int VENDOR_API_LEVEL_1 = 1;
@@ -74,7 +72,6 @@
      *     <li>{@link ActivityEmbeddingComponent#setSplitAttributesCalculator(
      *      androidx.window.extensions.core.util.function.Function)}</li>
      * </ul>
-     * @hide
      */
     @RestrictTo(LIBRARY_GROUP)
     int VENDOR_API_LEVEL_2 = 2;
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/area/WindowAreaComponent.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/area/WindowAreaComponent.java
index 422e972..21d5a95 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/area/WindowAreaComponent.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/area/WindowAreaComponent.java
@@ -62,7 +62,6 @@
      */
     int STATUS_AVAILABLE = 2;
 
-    /** @hide */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     @Retention(RetentionPolicy.SOURCE)
     @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
@@ -88,7 +87,6 @@
      */
     int SESSION_STATE_ACTIVE = 1;
 
-    /** @hide */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     @Retention(RetentionPolicy.SOURCE)
     @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
diff --git a/work/work-testing/api/current.txt b/work/work-testing/api/current.txt
index 40aebe82..e6473bb 100644
--- a/work/work-testing/api/current.txt
+++ b/work/work-testing/api/current.txt
@@ -29,7 +29,7 @@
   }
 
   public final class TestListenableWorkerBuilderKt {
-    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W> TestListenableWorkerBuilder(android.content.Context context, optional androidx.work.Data inputData, optional java.util.List<? extends java.lang.String> tags, optional int runAttemptCount, optional java.util.List<? extends android.net.Uri> triggeredContentUris, optional java.util.List<? extends java.lang.String> triggeredContentAuthorities);
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W> TestListenableWorkerBuilder(android.content.Context context, optional androidx.work.Data inputData, optional java.util.List<java.lang.String> tags, optional int runAttemptCount, optional java.util.List<? extends android.net.Uri> triggeredContentUris, optional java.util.List<java.lang.String> triggeredContentAuthorities);
   }
 
   public class TestWorkerBuilder<W extends androidx.work.Worker> extends androidx.work.testing.TestListenableWorkerBuilder<W> {
@@ -38,7 +38,7 @@
   }
 
   public final class TestWorkerBuilderKt {
-    method public static inline <reified W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W> TestWorkerBuilder(android.content.Context context, java.util.concurrent.Executor executor, optional androidx.work.Data inputData, optional java.util.List<? extends java.lang.String> tags, optional int runAttemptCount, optional java.util.List<? extends android.net.Uri> triggeredContentUris, optional java.util.List<? extends java.lang.String> triggeredContentAuthorities);
+    method public static inline <reified W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W> TestWorkerBuilder(android.content.Context context, java.util.concurrent.Executor executor, optional androidx.work.Data inputData, optional java.util.List<java.lang.String> tags, optional int runAttemptCount, optional java.util.List<? extends android.net.Uri> triggeredContentUris, optional java.util.List<java.lang.String> triggeredContentAuthorities);
   }
 
   public final class WorkManagerTestInitHelper {
diff --git a/work/work-testing/api/public_plus_experimental_current.txt b/work/work-testing/api/public_plus_experimental_current.txt
index 40aebe82..e6473bb 100644
--- a/work/work-testing/api/public_plus_experimental_current.txt
+++ b/work/work-testing/api/public_plus_experimental_current.txt
@@ -29,7 +29,7 @@
   }
 
   public final class TestListenableWorkerBuilderKt {
-    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W> TestListenableWorkerBuilder(android.content.Context context, optional androidx.work.Data inputData, optional java.util.List<? extends java.lang.String> tags, optional int runAttemptCount, optional java.util.List<? extends android.net.Uri> triggeredContentUris, optional java.util.List<? extends java.lang.String> triggeredContentAuthorities);
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W> TestListenableWorkerBuilder(android.content.Context context, optional androidx.work.Data inputData, optional java.util.List<java.lang.String> tags, optional int runAttemptCount, optional java.util.List<? extends android.net.Uri> triggeredContentUris, optional java.util.List<java.lang.String> triggeredContentAuthorities);
   }
 
   public class TestWorkerBuilder<W extends androidx.work.Worker> extends androidx.work.testing.TestListenableWorkerBuilder<W> {
@@ -38,7 +38,7 @@
   }
 
   public final class TestWorkerBuilderKt {
-    method public static inline <reified W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W> TestWorkerBuilder(android.content.Context context, java.util.concurrent.Executor executor, optional androidx.work.Data inputData, optional java.util.List<? extends java.lang.String> tags, optional int runAttemptCount, optional java.util.List<? extends android.net.Uri> triggeredContentUris, optional java.util.List<? extends java.lang.String> triggeredContentAuthorities);
+    method public static inline <reified W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W> TestWorkerBuilder(android.content.Context context, java.util.concurrent.Executor executor, optional androidx.work.Data inputData, optional java.util.List<java.lang.String> tags, optional int runAttemptCount, optional java.util.List<? extends android.net.Uri> triggeredContentUris, optional java.util.List<java.lang.String> triggeredContentAuthorities);
   }
 
   public final class WorkManagerTestInitHelper {
diff --git a/work/work-testing/api/restricted_current.txt b/work/work-testing/api/restricted_current.txt
index 40aebe82..e6473bb 100644
--- a/work/work-testing/api/restricted_current.txt
+++ b/work/work-testing/api/restricted_current.txt
@@ -29,7 +29,7 @@
   }
 
   public final class TestListenableWorkerBuilderKt {
-    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W> TestListenableWorkerBuilder(android.content.Context context, optional androidx.work.Data inputData, optional java.util.List<? extends java.lang.String> tags, optional int runAttemptCount, optional java.util.List<? extends android.net.Uri> triggeredContentUris, optional java.util.List<? extends java.lang.String> triggeredContentAuthorities);
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W> TestListenableWorkerBuilder(android.content.Context context, optional androidx.work.Data inputData, optional java.util.List<java.lang.String> tags, optional int runAttemptCount, optional java.util.List<? extends android.net.Uri> triggeredContentUris, optional java.util.List<java.lang.String> triggeredContentAuthorities);
   }
 
   public class TestWorkerBuilder<W extends androidx.work.Worker> extends androidx.work.testing.TestListenableWorkerBuilder<W> {
@@ -38,7 +38,7 @@
   }
 
   public final class TestWorkerBuilderKt {
-    method public static inline <reified W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W> TestWorkerBuilder(android.content.Context context, java.util.concurrent.Executor executor, optional androidx.work.Data inputData, optional java.util.List<? extends java.lang.String> tags, optional int runAttemptCount, optional java.util.List<? extends android.net.Uri> triggeredContentUris, optional java.util.List<? extends java.lang.String> triggeredContentAuthorities);
+    method public static inline <reified W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W> TestWorkerBuilder(android.content.Context context, java.util.concurrent.Executor executor, optional androidx.work.Data inputData, optional java.util.List<java.lang.String> tags, optional int runAttemptCount, optional java.util.List<? extends android.net.Uri> triggeredContentUris, optional java.util.List<java.lang.String> triggeredContentAuthorities);
   }
 
   public final class WorkManagerTestInitHelper {