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 {
