Merge "Remove uses of @hide in room libraries" into androidx-main
diff --git a/appactions/builtintypes/builtintypes-core/api/current.txt b/appactions/builtintypes/builtintypes-core/api/current.txt
index 4033c72..09eaecb 100644
--- a/appactions/builtintypes/builtintypes-core/api/current.txt
+++ b/appactions/builtintypes/builtintypes-core/api/current.txt
@@ -164,6 +164,444 @@
package androidx.appactions.builtintypes.types {
+ public abstract class AbstractAlarm<Self extends androidx.appactions.builtintypes.types.AbstractAlarm<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractAlarm.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Alarm {
+ ctor public AbstractAlarm(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.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 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.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;
+ }
+
+ public abstract static class AbstractAlarm.Builder<Self extends androidx.appactions.builtintypes.types.AbstractAlarm.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractAlarm<Built, Self>> implements androidx.appactions.builtintypes.types.Alarm.Builder<Self> {
+ ctor public AbstractAlarm.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 AbstractExecutionStatus<Self extends androidx.appactions.builtintypes.types.AbstractExecutionStatus<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractExecutionStatus.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.ExecutionStatus {
+ ctor public AbstractExecutionStatus(androidx.appactions.builtintypes.types.ExecutionStatus executionStatus);
+ 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 AbstractExecutionStatus.Builder<Self extends androidx.appactions.builtintypes.types.AbstractExecutionStatus.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractExecutionStatus<Built, Self>> implements androidx.appactions.builtintypes.types.ExecutionStatus.Builder<Self> {
+ ctor public AbstractExecutionStatus.Builder();
+ method public final Built build();
+ method protected abstract Built buildFromExecutionStatus(androidx.appactions.builtintypes.types.ExecutionStatus executionStatus);
+ 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 AbstractGenericErrorStatus<Self extends androidx.appactions.builtintypes.types.AbstractGenericErrorStatus<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractGenericErrorStatus.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.GenericErrorStatus {
+ ctor public AbstractGenericErrorStatus(androidx.appactions.builtintypes.types.GenericErrorStatus genericErrorStatus);
+ 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 AbstractGenericErrorStatus.Builder<Self extends androidx.appactions.builtintypes.types.AbstractGenericErrorStatus.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractGenericErrorStatus<Built, Self>> implements androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<Self> {
+ ctor public AbstractGenericErrorStatus.Builder();
+ method public final Built build();
+ method protected abstract Built buildFromGenericErrorStatus(androidx.appactions.builtintypes.types.GenericErrorStatus genericErrorStatus);
+ 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 AbstractIntangible<Self extends androidx.appactions.builtintypes.types.AbstractIntangible<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractIntangible.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Intangible {
+ ctor public AbstractIntangible(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 AbstractIntangible.Builder<Self extends androidx.appactions.builtintypes.types.AbstractIntangible.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractIntangible<Built, Self>> implements androidx.appactions.builtintypes.types.Intangible.Builder<Self> {
+ ctor public AbstractIntangible.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 AbstractObjectCreationLimitReachedStatus<Self extends androidx.appactions.builtintypes.types.AbstractObjectCreationLimitReachedStatus<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractObjectCreationLimitReachedStatus.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus {
+ ctor public AbstractObjectCreationLimitReachedStatus(androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus objectCreationLimitReachedStatus);
+ 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 AbstractObjectCreationLimitReachedStatus.Builder<Self extends androidx.appactions.builtintypes.types.AbstractObjectCreationLimitReachedStatus.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractObjectCreationLimitReachedStatus<Built, Self>> implements androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<Self> {
+ ctor public AbstractObjectCreationLimitReachedStatus.Builder();
+ method public final Built build();
+ method protected abstract Built buildFromObjectCreationLimitReachedStatus(androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus objectCreationLimitReachedStatus);
+ 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 AbstractPerson<Self extends androidx.appactions.builtintypes.types.AbstractPerson<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractPerson.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Person {
+ ctor public AbstractPerson(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 AbstractPerson.Builder<Self extends androidx.appactions.builtintypes.types.AbstractPerson.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractPerson<Built, Self>> implements androidx.appactions.builtintypes.types.Person.Builder<Self> {
+ ctor public AbstractPerson.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 AbstractSchedule<Self extends androidx.appactions.builtintypes.types.AbstractSchedule<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractSchedule.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Schedule {
+ ctor public AbstractSchedule(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 AbstractSchedule.Builder<Self extends androidx.appactions.builtintypes.types.AbstractSchedule.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractSchedule<Built, Self>> implements androidx.appactions.builtintypes.types.Schedule.Builder<Self> {
+ ctor public AbstractSchedule.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 AbstractSuccessStatus<Self extends androidx.appactions.builtintypes.types.AbstractSuccessStatus<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractSuccessStatus.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.SuccessStatus {
+ ctor public AbstractSuccessStatus(androidx.appactions.builtintypes.types.SuccessStatus successStatus);
+ 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 AbstractSuccessStatus.Builder<Self extends androidx.appactions.builtintypes.types.AbstractSuccessStatus.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractSuccessStatus<Built, Self>> implements androidx.appactions.builtintypes.types.SuccessStatus.Builder<Self> {
+ ctor public AbstractSuccessStatus.Builder();
+ method public final Built build();
+ method protected abstract Built buildFromSuccessStatus(androidx.appactions.builtintypes.types.SuccessStatus successStatus);
+ 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 AbstractThing<Self extends androidx.appactions.builtintypes.types.AbstractThing<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractThing.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Thing {
+ ctor public AbstractThing(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 AbstractThing.Builder<Self extends androidx.appactions.builtintypes.types.AbstractThing.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractThing<Built, Self>> implements androidx.appactions.builtintypes.types.Thing.Builder<Self> {
+ ctor public AbstractThing.Builder();
+ method public final Built build();
+ method protected abstract Built buildFromThing(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 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 AbstractTimer<Self extends androidx.appactions.builtintypes.types.AbstractTimer<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractTimer.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Timer {
+ ctor public AbstractTimer(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 AbstractTimer.Builder<Self extends androidx.appactions.builtintypes.types.AbstractTimer.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractTimer<Built, Self>> implements androidx.appactions.builtintypes.types.Timer.Builder<Self> {
+ ctor public AbstractTimer.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 abstract class AbstractUnsupportedOperationStatus<Self extends androidx.appactions.builtintypes.types.AbstractUnsupportedOperationStatus<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractUnsupportedOperationStatus.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.UnsupportedOperationStatus {
+ ctor public AbstractUnsupportedOperationStatus(androidx.appactions.builtintypes.types.UnsupportedOperationStatus unsupportedOperationStatus);
+ 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 AbstractUnsupportedOperationStatus.Builder<Self extends androidx.appactions.builtintypes.types.AbstractUnsupportedOperationStatus.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractUnsupportedOperationStatus<Built, Self>> implements androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<Self> {
+ ctor public AbstractUnsupportedOperationStatus.Builder();
+ method public final Built build();
+ method protected abstract Built buildFromUnsupportedOperationStatus(androidx.appactions.builtintypes.types.UnsupportedOperationStatus unsupportedOperationStatus);
+ 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 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();
@@ -222,267 +660,32 @@
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.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 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.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;
+ public interface ExecutionStatus extends androidx.appactions.builtintypes.types.Intangible {
+ method public default static androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder();
+ method public androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> toBuilder();
+ field public static final androidx.appactions.builtintypes.types.ExecutionStatus.Companion Companion;
}
- 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 static interface ExecutionStatus.Builder<Self extends androidx.appactions.builtintypes.types.ExecutionStatus.Builder<Self>> extends androidx.appactions.builtintypes.types.Intangible.Builder<Self> {
+ method public androidx.appactions.builtintypes.types.ExecutionStatus build();
}
- 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 static final class ExecutionStatus.Companion {
+ method public androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder();
}
- 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 interface GenericErrorStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
+ method public default static androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder();
+ method public androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> toBuilder();
+ field public static final androidx.appactions.builtintypes.types.GenericErrorStatus.Companion Companion;
}
- 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 static interface GenericErrorStatus.Builder<Self extends androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<Self>> extends androidx.appactions.builtintypes.types.ExecutionStatus.Builder<Self> {
+ method public androidx.appactions.builtintypes.types.GenericErrorStatus build();
}
- 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> {
- ctor public GenericThing.Builder();
- method public final Built build();
- method protected abstract Built buildFromThing(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 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 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 static final class GenericErrorStatus.Companion {
+ method public androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder();
}
public interface Intangible extends androidx.appactions.builtintypes.types.Thing {
@@ -499,6 +702,20 @@
method public androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder();
}
+ public interface ObjectCreationLimitReachedStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
+ method public default static androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder();
+ method public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> toBuilder();
+ field public static final androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Companion Companion;
+ }
+
+ public static interface ObjectCreationLimitReachedStatus.Builder<Self extends androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<Self>> extends androidx.appactions.builtintypes.types.ExecutionStatus.Builder<Self> {
+ method public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus build();
+ }
+
+ public static final class ObjectCreationLimitReachedStatus.Companion {
+ method public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.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();
@@ -593,6 +810,20 @@
method public androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder();
}
+ public interface SuccessStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
+ method public default static androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder();
+ method public androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> toBuilder();
+ field public static final androidx.appactions.builtintypes.types.SuccessStatus.Companion Companion;
+ }
+
+ public static interface SuccessStatus.Builder<Self extends androidx.appactions.builtintypes.types.SuccessStatus.Builder<Self>> extends androidx.appactions.builtintypes.types.ExecutionStatus.Builder<Self> {
+ method public androidx.appactions.builtintypes.types.SuccessStatus build();
+ }
+
+ public static final class SuccessStatus.Companion {
+ method public androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder();
+ }
+
public interface Thing {
method public default static androidx.appactions.builtintypes.types.Thing.Builder<?> Builder();
method public androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
@@ -635,5 +866,19 @@
method public androidx.appactions.builtintypes.types.Timer.Builder<?> Builder();
}
+ public interface UnsupportedOperationStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
+ method public default static androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder();
+ method public androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> toBuilder();
+ field public static final androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Companion Companion;
+ }
+
+ public static interface UnsupportedOperationStatus.Builder<Self extends androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<Self>> extends androidx.appactions.builtintypes.types.ExecutionStatus.Builder<Self> {
+ method public androidx.appactions.builtintypes.types.UnsupportedOperationStatus build();
+ }
+
+ public static final class UnsupportedOperationStatus.Companion {
+ method public androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder();
+ }
+
}
diff --git a/appactions/builtintypes/builtintypes-core/api/restricted_current.txt b/appactions/builtintypes/builtintypes-core/api/restricted_current.txt
index 4033c72..09eaecb 100644
--- a/appactions/builtintypes/builtintypes-core/api/restricted_current.txt
+++ b/appactions/builtintypes/builtintypes-core/api/restricted_current.txt
@@ -164,6 +164,444 @@
package androidx.appactions.builtintypes.types {
+ public abstract class AbstractAlarm<Self extends androidx.appactions.builtintypes.types.AbstractAlarm<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractAlarm.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Alarm {
+ ctor public AbstractAlarm(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.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 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.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;
+ }
+
+ public abstract static class AbstractAlarm.Builder<Self extends androidx.appactions.builtintypes.types.AbstractAlarm.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractAlarm<Built, Self>> implements androidx.appactions.builtintypes.types.Alarm.Builder<Self> {
+ ctor public AbstractAlarm.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 AbstractExecutionStatus<Self extends androidx.appactions.builtintypes.types.AbstractExecutionStatus<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractExecutionStatus.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.ExecutionStatus {
+ ctor public AbstractExecutionStatus(androidx.appactions.builtintypes.types.ExecutionStatus executionStatus);
+ 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 AbstractExecutionStatus.Builder<Self extends androidx.appactions.builtintypes.types.AbstractExecutionStatus.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractExecutionStatus<Built, Self>> implements androidx.appactions.builtintypes.types.ExecutionStatus.Builder<Self> {
+ ctor public AbstractExecutionStatus.Builder();
+ method public final Built build();
+ method protected abstract Built buildFromExecutionStatus(androidx.appactions.builtintypes.types.ExecutionStatus executionStatus);
+ 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 AbstractGenericErrorStatus<Self extends androidx.appactions.builtintypes.types.AbstractGenericErrorStatus<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractGenericErrorStatus.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.GenericErrorStatus {
+ ctor public AbstractGenericErrorStatus(androidx.appactions.builtintypes.types.GenericErrorStatus genericErrorStatus);
+ 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 AbstractGenericErrorStatus.Builder<Self extends androidx.appactions.builtintypes.types.AbstractGenericErrorStatus.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractGenericErrorStatus<Built, Self>> implements androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<Self> {
+ ctor public AbstractGenericErrorStatus.Builder();
+ method public final Built build();
+ method protected abstract Built buildFromGenericErrorStatus(androidx.appactions.builtintypes.types.GenericErrorStatus genericErrorStatus);
+ 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 AbstractIntangible<Self extends androidx.appactions.builtintypes.types.AbstractIntangible<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractIntangible.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Intangible {
+ ctor public AbstractIntangible(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 AbstractIntangible.Builder<Self extends androidx.appactions.builtintypes.types.AbstractIntangible.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractIntangible<Built, Self>> implements androidx.appactions.builtintypes.types.Intangible.Builder<Self> {
+ ctor public AbstractIntangible.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 AbstractObjectCreationLimitReachedStatus<Self extends androidx.appactions.builtintypes.types.AbstractObjectCreationLimitReachedStatus<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractObjectCreationLimitReachedStatus.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus {
+ ctor public AbstractObjectCreationLimitReachedStatus(androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus objectCreationLimitReachedStatus);
+ 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 AbstractObjectCreationLimitReachedStatus.Builder<Self extends androidx.appactions.builtintypes.types.AbstractObjectCreationLimitReachedStatus.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractObjectCreationLimitReachedStatus<Built, Self>> implements androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<Self> {
+ ctor public AbstractObjectCreationLimitReachedStatus.Builder();
+ method public final Built build();
+ method protected abstract Built buildFromObjectCreationLimitReachedStatus(androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus objectCreationLimitReachedStatus);
+ 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 AbstractPerson<Self extends androidx.appactions.builtintypes.types.AbstractPerson<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractPerson.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Person {
+ ctor public AbstractPerson(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 AbstractPerson.Builder<Self extends androidx.appactions.builtintypes.types.AbstractPerson.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractPerson<Built, Self>> implements androidx.appactions.builtintypes.types.Person.Builder<Self> {
+ ctor public AbstractPerson.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 AbstractSchedule<Self extends androidx.appactions.builtintypes.types.AbstractSchedule<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractSchedule.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Schedule {
+ ctor public AbstractSchedule(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 AbstractSchedule.Builder<Self extends androidx.appactions.builtintypes.types.AbstractSchedule.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractSchedule<Built, Self>> implements androidx.appactions.builtintypes.types.Schedule.Builder<Self> {
+ ctor public AbstractSchedule.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 AbstractSuccessStatus<Self extends androidx.appactions.builtintypes.types.AbstractSuccessStatus<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractSuccessStatus.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.SuccessStatus {
+ ctor public AbstractSuccessStatus(androidx.appactions.builtintypes.types.SuccessStatus successStatus);
+ 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 AbstractSuccessStatus.Builder<Self extends androidx.appactions.builtintypes.types.AbstractSuccessStatus.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractSuccessStatus<Built, Self>> implements androidx.appactions.builtintypes.types.SuccessStatus.Builder<Self> {
+ ctor public AbstractSuccessStatus.Builder();
+ method public final Built build();
+ method protected abstract Built buildFromSuccessStatus(androidx.appactions.builtintypes.types.SuccessStatus successStatus);
+ 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 AbstractThing<Self extends androidx.appactions.builtintypes.types.AbstractThing<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractThing.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Thing {
+ ctor public AbstractThing(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 AbstractThing.Builder<Self extends androidx.appactions.builtintypes.types.AbstractThing.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractThing<Built, Self>> implements androidx.appactions.builtintypes.types.Thing.Builder<Self> {
+ ctor public AbstractThing.Builder();
+ method public final Built build();
+ method protected abstract Built buildFromThing(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 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 AbstractTimer<Self extends androidx.appactions.builtintypes.types.AbstractTimer<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractTimer.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Timer {
+ ctor public AbstractTimer(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 AbstractTimer.Builder<Self extends androidx.appactions.builtintypes.types.AbstractTimer.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractTimer<Built, Self>> implements androidx.appactions.builtintypes.types.Timer.Builder<Self> {
+ ctor public AbstractTimer.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 abstract class AbstractUnsupportedOperationStatus<Self extends androidx.appactions.builtintypes.types.AbstractUnsupportedOperationStatus<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.AbstractUnsupportedOperationStatus.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.UnsupportedOperationStatus {
+ ctor public AbstractUnsupportedOperationStatus(androidx.appactions.builtintypes.types.UnsupportedOperationStatus unsupportedOperationStatus);
+ 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 AbstractUnsupportedOperationStatus.Builder<Self extends androidx.appactions.builtintypes.types.AbstractUnsupportedOperationStatus.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.AbstractUnsupportedOperationStatus<Built, Self>> implements androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<Self> {
+ ctor public AbstractUnsupportedOperationStatus.Builder();
+ method public final Built build();
+ method protected abstract Built buildFromUnsupportedOperationStatus(androidx.appactions.builtintypes.types.UnsupportedOperationStatus unsupportedOperationStatus);
+ 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 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();
@@ -222,267 +660,32 @@
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.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 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.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;
+ public interface ExecutionStatus extends androidx.appactions.builtintypes.types.Intangible {
+ method public default static androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder();
+ method public androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> toBuilder();
+ field public static final androidx.appactions.builtintypes.types.ExecutionStatus.Companion Companion;
}
- 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 static interface ExecutionStatus.Builder<Self extends androidx.appactions.builtintypes.types.ExecutionStatus.Builder<Self>> extends androidx.appactions.builtintypes.types.Intangible.Builder<Self> {
+ method public androidx.appactions.builtintypes.types.ExecutionStatus build();
}
- 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 static final class ExecutionStatus.Companion {
+ method public androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder();
}
- 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 interface GenericErrorStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
+ method public default static androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder();
+ method public androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> toBuilder();
+ field public static final androidx.appactions.builtintypes.types.GenericErrorStatus.Companion Companion;
}
- 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 static interface GenericErrorStatus.Builder<Self extends androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<Self>> extends androidx.appactions.builtintypes.types.ExecutionStatus.Builder<Self> {
+ method public androidx.appactions.builtintypes.types.GenericErrorStatus build();
}
- 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> {
- ctor public GenericThing.Builder();
- method public final Built build();
- method protected abstract Built buildFromThing(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 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 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 static final class GenericErrorStatus.Companion {
+ method public androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder();
}
public interface Intangible extends androidx.appactions.builtintypes.types.Thing {
@@ -499,6 +702,20 @@
method public androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder();
}
+ public interface ObjectCreationLimitReachedStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
+ method public default static androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder();
+ method public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> toBuilder();
+ field public static final androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Companion Companion;
+ }
+
+ public static interface ObjectCreationLimitReachedStatus.Builder<Self extends androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<Self>> extends androidx.appactions.builtintypes.types.ExecutionStatus.Builder<Self> {
+ method public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus build();
+ }
+
+ public static final class ObjectCreationLimitReachedStatus.Companion {
+ method public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.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();
@@ -593,6 +810,20 @@
method public androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder();
}
+ public interface SuccessStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
+ method public default static androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder();
+ method public androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> toBuilder();
+ field public static final androidx.appactions.builtintypes.types.SuccessStatus.Companion Companion;
+ }
+
+ public static interface SuccessStatus.Builder<Self extends androidx.appactions.builtintypes.types.SuccessStatus.Builder<Self>> extends androidx.appactions.builtintypes.types.ExecutionStatus.Builder<Self> {
+ method public androidx.appactions.builtintypes.types.SuccessStatus build();
+ }
+
+ public static final class SuccessStatus.Companion {
+ method public androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder();
+ }
+
public interface Thing {
method public default static androidx.appactions.builtintypes.types.Thing.Builder<?> Builder();
method public androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
@@ -635,5 +866,19 @@
method public androidx.appactions.builtintypes.types.Timer.Builder<?> Builder();
}
+ public interface UnsupportedOperationStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
+ method public default static androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder();
+ method public androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> toBuilder();
+ field public static final androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Companion Companion;
+ }
+
+ public static interface UnsupportedOperationStatus.Builder<Self extends androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<Self>> extends androidx.appactions.builtintypes.types.ExecutionStatus.Builder<Self> {
+ method public androidx.appactions.builtintypes.types.UnsupportedOperationStatus build();
+ }
+
+ public static final class UnsupportedOperationStatus.Companion {
+ method public androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder();
+ }
+
}
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
index fff77c1..6f1a4dd 100644
--- 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
@@ -36,10 +36,14 @@
* 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.
+ * using [Companion.Builder] or see [AbstractAlarm] if you need to extend this type.
*/
public interface Alarm : Thing {
- /** Associates an Alarm with a Schedule. */
+ /**
+ * Associates an Alarm with a Schedule.
+ *
+ * See http://schema.googleapis.com/alarmSchedule for more context.
+ */
public val alarmSchedule: Schedule?
/** Converts this [Alarm] to its builder with all the properties copied over. */
@@ -54,7 +58,7 @@
* 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.
+ * [AbstractAlarm.Builder] if you need to extend this builder.
*/
public interface Builder<Self : Builder<Self>> : Thing.Builder<Self> {
/** Returns a built [Alarm]. */
@@ -90,7 +94,7 @@
}
/**
- * A generic implementation of [Alarm].
+ * An abstract implementation of [Alarm].
*
* Allows for extension like:
* ```kt
@@ -98,7 +102,7 @@
* alarm: Alarm,
* val foo: String,
* val bars: List<Int>,
- * ) : GenericAlarm<
+ * ) : AbstractAlarm<
* MyAlarm,
* MyAlarm.Builder
* >(alarm) {
@@ -116,17 +120,17 @@
* }
*
* class Builder :
- * GenericAlarm.Builder<
+ * AbstractAlarm.Builder<
* Builder,
* MyAlarm> {...}
* }
* ```
*
- * Also see [GenericAlarm.Builder].
+ * Also see [AbstractAlarm.Builder].
*/
@Suppress("UNCHECKED_CAST")
-public abstract class GenericAlarm<
- Self : GenericAlarm<Self, Builder>, Builder : GenericAlarm.Builder<Builder, Self>>
+public abstract class AbstractAlarm<
+ Self : AbstractAlarm<Self, Builder>, Builder : AbstractAlarm.Builder<Builder, Self>>
internal constructor(
public final override val alarmSchedule: Schedule?,
public final override val disambiguatingDescription: DisambiguatingDescription?,
@@ -198,12 +202,12 @@
}
/**
- * A generic implementation of [Alarm.Builder].
+ * An abstract implementation of [Alarm.Builder].
*
* Allows for extension like:
* ```kt
* class MyAlarm :
- * : GenericAlarm<
+ * : AbstractAlarm<
* MyAlarm,
* MyAlarm.Builder>(...) {
*
@@ -246,10 +250,10 @@
* }
* ```
*
- * Also see [GenericAlarm].
+ * Also see [AbstractAlarm].
*/
@Suppress("StaticFinalBuilder")
- public abstract class Builder<Self : Builder<Self, Built>, Built : GenericAlarm<Built, Self>> :
+ public abstract class Builder<Self : Builder<Self, Built>, Built : AbstractAlarm<Built, Self>> :
Alarm.Builder<Self> {
/**
* Human readable name for the concrete [Self] class.
@@ -349,7 +353,7 @@
}
}
-internal class AlarmImpl : GenericAlarm<AlarmImpl, AlarmImpl.Builder> {
+internal class AlarmImpl : AbstractAlarm<AlarmImpl, AlarmImpl.Builder> {
protected override val selfTypeName: String
get() = "Alarm"
@@ -367,7 +371,7 @@
protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
- internal class Builder : GenericAlarm.Builder<Builder, AlarmImpl>() {
+ internal class Builder : AbstractAlarm.Builder<Builder, AlarmImpl>() {
protected override val selfTypeName: String
get() = "Alarm.Builder"
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/ExecutionStatus.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/ExecutionStatus.kt
new file mode 100644
index 0000000..fcd7b3a
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/ExecutionStatus.kt
@@ -0,0 +1,343 @@
+// 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
+
+/**
+ * Status of a task that was pending execution.
+ *
+ * See http://schema.googleapis.com/ExecutionStatus for context.
+ *
+ * Should not be directly implemented. More properties may be added over time. Instead consider
+ * using [Companion.Builder] or see [AbstractExecutionStatus] if you need to extend this type.
+ */
+public interface ExecutionStatus : Intangible {
+ /** Converts this [ExecutionStatus] 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<*> = ExecutionStatusImpl.Builder()
+ }
+
+ /**
+ * Builder for [ExecutionStatus].
+ *
+ * Should not be directly implemented. More methods may be added over time. See
+ * [AbstractExecutionStatus.Builder] if you need to extend this builder.
+ */
+ public interface Builder<Self : Builder<Self>> : Intangible.Builder<Self> {
+ /** Returns a built [ExecutionStatus]. */
+ public override fun build(): ExecutionStatus
+ }
+}
+
+/**
+ * An abstract implementation of [ExecutionStatus].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MyExecutionStatus internal constructor(
+ * executionStatus: ExecutionStatus,
+ * val foo: String,
+ * val bars: List<Int>,
+ * ) : AbstractExecutionStatus<
+ * MyExecutionStatus,
+ * MyExecutionStatus.Builder
+ * >(executionStatus) {
+ *
+ * override val selfTypeName =
+ * "MyExecutionStatus"
+ *
+ * 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 :
+ * AbstractExecutionStatus.Builder<
+ * Builder,
+ * MyExecutionStatus> {...}
+ * }
+ * ```
+ *
+ * Also see [AbstractExecutionStatus.Builder].
+ */
+@Suppress("UNCHECKED_CAST")
+public abstract class AbstractExecutionStatus<
+ Self : AbstractExecutionStatus<Self, Builder>,
+ Builder : AbstractExecutionStatus.Builder<Builder, Self>>
+internal constructor(
+ public final override val disambiguatingDescription: DisambiguatingDescription?,
+ public final override val identifier: String?,
+ public final override val name: Name?,
+) : ExecutionStatus {
+ /**
+ * 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 [ExecutionStatus] instance. */
+ public constructor(
+ executionStatus: ExecutionStatus
+ ) : this(
+ executionStatus.disambiguatingDescription,
+ executionStatus.identifier,
+ executionStatus.name
+ )
+
+ /**
+ * Returns a concrete [Builder] with the additional, non-[ExecutionStatus] 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)"""
+ }
+
+ /**
+ * An abstract implementation of [ExecutionStatus.Builder].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MyExecutionStatus :
+ * : AbstractExecutionStatus<
+ * MyExecutionStatus,
+ * MyExecutionStatus.Builder>(...) {
+ *
+ * class Builder
+ * : Builder<
+ * Builder,
+ * MyExecutionStatus
+ * >() {
+ * private var foo: String? = null
+ * private val bars = mutableListOf<Int>()
+ *
+ * override val selfTypeName =
+ * "MyExecutionStatus.Builder"
+ *
+ * override val additionalProperties: Map<String, Any?>
+ * get() = mapOf("foo" to foo, "bars" to bars)
+ *
+ * override fun buildFromExecutionStatus(
+ * executionStatus: ExecutionStatus
+ * ): MyExecutionStatus {
+ * return MyExecutionStatus(
+ * executionStatus,
+ * 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 [AbstractExecutionStatus].
+ */
+ @Suppress("StaticFinalBuilder")
+ public abstract class Builder<
+ Self : Builder<Self, Built>, Built : AbstractExecutionStatus<Built, Self>> :
+ ExecutionStatus.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 [ExecutionStatus].
+ *
+ * Subclasses should override this method to build a concrete [Built] instance that holds both
+ * the [ExecutionStatus]-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 buildFromExecutionStatus(executionStatus: ExecutionStatus): Built
+
+ public final override fun build(): Built =
+ buildFromExecutionStatus(ExecutionStatusImpl(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 ExecutionStatusImpl :
+ AbstractExecutionStatus<ExecutionStatusImpl, ExecutionStatusImpl.Builder> {
+ protected override val selfTypeName: String
+ get() = "ExecutionStatus"
+
+ protected override val additionalProperties: Map<String, Any?>
+ get() = emptyMap()
+
+ public constructor(
+ disambiguatingDescription: DisambiguatingDescription?,
+ identifier: String?,
+ name: Name?,
+ ) : super(disambiguatingDescription, identifier, name)
+
+ public constructor(executionStatus: ExecutionStatus) : super(executionStatus)
+
+ protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
+
+ internal class Builder : AbstractExecutionStatus.Builder<Builder, ExecutionStatusImpl>() {
+ protected override val selfTypeName: String
+ get() = "ExecutionStatus.Builder"
+
+ protected override val additionalProperties: Map<String, Any?>
+ get() = emptyMap()
+
+ protected override fun buildFromExecutionStatus(
+ executionStatus: ExecutionStatus
+ ): ExecutionStatusImpl =
+ executionStatus as? ExecutionStatusImpl ?: ExecutionStatusImpl(executionStatus)
+ }
+}
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/GenericErrorStatus.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/GenericErrorStatus.kt
new file mode 100644
index 0000000..028c76a
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/GenericErrorStatus.kt
@@ -0,0 +1,349 @@
+// 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
+
+/**
+ * Status indicating that the task was not executed successfully.
+ *
+ * See http://schema.googleapis.com/GenericErrorStatus for context.
+ *
+ * Should not be directly implemented. More properties may be added over time. Instead consider
+ * using [Companion.Builder] or see [AbstractGenericErrorStatus] if you need to extend this type.
+ */
+public interface GenericErrorStatus : ExecutionStatus {
+ /** Converts this [GenericErrorStatus] 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<*> = GenericErrorStatusImpl.Builder()
+ }
+
+ /**
+ * Builder for [GenericErrorStatus].
+ *
+ * Should not be directly implemented. More methods may be added over time. See
+ * [AbstractGenericErrorStatus.Builder] if you need to extend this builder.
+ */
+ public interface Builder<Self : Builder<Self>> : ExecutionStatus.Builder<Self> {
+ /** Returns a built [GenericErrorStatus]. */
+ public override fun build(): GenericErrorStatus
+ }
+}
+
+/**
+ * An abstract implementation of [GenericErrorStatus].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MyGenericErrorStatus internal constructor(
+ * genericErrorStatus: GenericErrorStatus,
+ * val foo: String,
+ * val bars: List<Int>,
+ * ) : AbstractGenericErrorStatus<
+ * MyGenericErrorStatus,
+ * MyGenericErrorStatus.Builder
+ * >(genericErrorStatus) {
+ *
+ * override val selfTypeName =
+ * "MyGenericErrorStatus"
+ *
+ * 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 :
+ * AbstractGenericErrorStatus.Builder<
+ * Builder,
+ * MyGenericErrorStatus> {...}
+ * }
+ * ```
+ *
+ * Also see [AbstractGenericErrorStatus.Builder].
+ */
+@Suppress("UNCHECKED_CAST")
+public abstract class AbstractGenericErrorStatus<
+ Self : AbstractGenericErrorStatus<Self, Builder>,
+ Builder : AbstractGenericErrorStatus.Builder<Builder, Self>>
+internal constructor(
+ public final override val disambiguatingDescription: DisambiguatingDescription?,
+ public final override val identifier: String?,
+ public final override val name: Name?,
+) : GenericErrorStatus {
+ /**
+ * 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 [GenericErrorStatus] instance. */
+ public constructor(
+ genericErrorStatus: GenericErrorStatus
+ ) : this(
+ genericErrorStatus.disambiguatingDescription,
+ genericErrorStatus.identifier,
+ genericErrorStatus.name
+ )
+
+ /**
+ * Returns a concrete [Builder] with the additional, non-[GenericErrorStatus] 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)"""
+ }
+
+ /**
+ * An abstract implementation of [GenericErrorStatus.Builder].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MyGenericErrorStatus :
+ * : AbstractGenericErrorStatus<
+ * MyGenericErrorStatus,
+ * MyGenericErrorStatus.Builder>(...) {
+ *
+ * class Builder
+ * : Builder<
+ * Builder,
+ * MyGenericErrorStatus
+ * >() {
+ * private var foo: String? = null
+ * private val bars = mutableListOf<Int>()
+ *
+ * override val selfTypeName =
+ * "MyGenericErrorStatus.Builder"
+ *
+ * override val additionalProperties: Map<String, Any?>
+ * get() = mapOf("foo" to foo, "bars" to bars)
+ *
+ * override fun buildFromGenericErrorStatus(
+ * genericErrorStatus: GenericErrorStatus
+ * ): MyGenericErrorStatus {
+ * return MyGenericErrorStatus(
+ * genericErrorStatus,
+ * 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 [AbstractGenericErrorStatus].
+ */
+ @Suppress("StaticFinalBuilder")
+ public abstract class Builder<
+ Self : Builder<Self, Built>, Built : AbstractGenericErrorStatus<Built, Self>> :
+ GenericErrorStatus.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 [GenericErrorStatus].
+ *
+ * Subclasses should override this method to build a concrete [Built] instance that holds both
+ * the [GenericErrorStatus]-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 buildFromGenericErrorStatus(
+ genericErrorStatus: GenericErrorStatus
+ ): Built
+
+ public final override fun build(): Built =
+ buildFromGenericErrorStatus(
+ GenericErrorStatusImpl(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 GenericErrorStatusImpl :
+ AbstractGenericErrorStatus<GenericErrorStatusImpl, GenericErrorStatusImpl.Builder> {
+ protected override val selfTypeName: String
+ get() = "GenericErrorStatus"
+
+ protected override val additionalProperties: Map<String, Any?>
+ get() = emptyMap()
+
+ public constructor(
+ disambiguatingDescription: DisambiguatingDescription?,
+ identifier: String?,
+ name: Name?,
+ ) : super(disambiguatingDescription, identifier, name)
+
+ public constructor(genericErrorStatus: GenericErrorStatus) : super(genericErrorStatus)
+
+ protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
+
+ internal class Builder : AbstractGenericErrorStatus.Builder<Builder, GenericErrorStatusImpl>() {
+ protected override val selfTypeName: String
+ get() = "GenericErrorStatus.Builder"
+
+ protected override val additionalProperties: Map<String, Any?>
+ get() = emptyMap()
+
+ protected override fun buildFromGenericErrorStatus(
+ genericErrorStatus: GenericErrorStatus
+ ): GenericErrorStatusImpl =
+ genericErrorStatus as? GenericErrorStatusImpl ?: GenericErrorStatusImpl(genericErrorStatus)
+ }
+}
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
index e1d1386..e862f93 100644
--- 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
@@ -36,7 +36,7 @@
* 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.
+ * using [Companion.Builder] or see [AbstractIntangible] if you need to extend this type.
*/
public interface Intangible : Thing {
/** Converts this [Intangible] to its builder with all the properties copied over. */
@@ -51,7 +51,7 @@
* 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.
+ * [AbstractIntangible.Builder] if you need to extend this builder.
*/
public interface Builder<Self : Builder<Self>> : Thing.Builder<Self> {
/** Returns a built [Intangible]. */
@@ -60,7 +60,7 @@
}
/**
- * A generic implementation of [Intangible].
+ * An abstract implementation of [Intangible].
*
* Allows for extension like:
* ```kt
@@ -68,7 +68,7 @@
* intangible: Intangible,
* val foo: String,
* val bars: List<Int>,
- * ) : GenericIntangible<
+ * ) : AbstractIntangible<
* MyIntangible,
* MyIntangible.Builder
* >(intangible) {
@@ -86,17 +86,17 @@
* }
*
* class Builder :
- * GenericIntangible.Builder<
+ * AbstractIntangible.Builder<
* Builder,
* MyIntangible> {...}
* }
* ```
*
- * Also see [GenericIntangible.Builder].
+ * Also see [AbstractIntangible.Builder].
*/
@Suppress("UNCHECKED_CAST")
-public abstract class GenericIntangible<
- Self : GenericIntangible<Self, Builder>, Builder : GenericIntangible.Builder<Builder, Self>>
+public abstract class AbstractIntangible<
+ Self : AbstractIntangible<Self, Builder>, Builder : AbstractIntangible.Builder<Builder, Self>>
internal constructor(
public final override val disambiguatingDescription: DisambiguatingDescription?,
public final override val identifier: String?,
@@ -162,12 +162,12 @@
}
/**
- * A generic implementation of [Intangible.Builder].
+ * An abstract implementation of [Intangible.Builder].
*
* Allows for extension like:
* ```kt
* class MyIntangible :
- * : GenericIntangible<
+ * : AbstractIntangible<
* MyIntangible,
* MyIntangible.Builder>(...) {
*
@@ -210,11 +210,11 @@
* }
* ```
*
- * Also see [GenericIntangible].
+ * Also see [AbstractIntangible].
*/
@Suppress("StaticFinalBuilder")
public abstract class Builder<
- Self : Builder<Self, Built>, Built : GenericIntangible<Built, Self>> :
+ Self : Builder<Self, Built>, Built : AbstractIntangible<Built, Self>> :
Intangible.Builder<Self> {
/**
* Human readable name for the concrete [Self] class.
@@ -304,7 +304,7 @@
}
}
-internal class IntangibleImpl : GenericIntangible<IntangibleImpl, IntangibleImpl.Builder> {
+internal class IntangibleImpl : AbstractIntangible<IntangibleImpl, IntangibleImpl.Builder> {
protected override val selfTypeName: String
get() = "Intangible"
@@ -321,7 +321,7 @@
protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
- internal class Builder : GenericIntangible.Builder<Builder, IntangibleImpl>() {
+ internal class Builder : AbstractIntangible.Builder<Builder, IntangibleImpl>() {
protected override val selfTypeName: String
get() = "Intangible.Builder"
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/ObjectCreationLimitReachedStatus.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/ObjectCreationLimitReachedStatus.kt
new file mode 100644
index 0000000..9504c94
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/ObjectCreationLimitReachedStatus.kt
@@ -0,0 +1,365 @@
+// 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
+
+/**
+ * Status indicating that the number of objects have reached the limit and more objects cannot be
+ * created.
+ *
+ * See http://schema.googleapis.com/ObjectCreationLimitReachedStatus for context.
+ *
+ * Should not be directly implemented. More properties may be added over time. Instead consider
+ * using [Companion.Builder] or see [AbstractObjectCreationLimitReachedStatus] if you need to extend
+ * this type.
+ */
+public interface ObjectCreationLimitReachedStatus : ExecutionStatus {
+ /**
+ * Converts this [ObjectCreationLimitReachedStatus] 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<*> = ObjectCreationLimitReachedStatusImpl.Builder()
+ }
+
+ /**
+ * Builder for [ObjectCreationLimitReachedStatus].
+ *
+ * Should not be directly implemented. More methods may be added over time. See
+ * [AbstractObjectCreationLimitReachedStatus.Builder] if you need to extend this builder.
+ */
+ public interface Builder<Self : Builder<Self>> : ExecutionStatus.Builder<Self> {
+ /** Returns a built [ObjectCreationLimitReachedStatus]. */
+ public override fun build(): ObjectCreationLimitReachedStatus
+ }
+}
+
+/**
+ * An abstract implementation of [ObjectCreationLimitReachedStatus].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MyObjectCreationLimitReachedStatus internal constructor(
+ * objectCreationLimitReachedStatus: ObjectCreationLimitReachedStatus,
+ * val foo: String,
+ * val bars: List<Int>,
+ * ) : AbstractObjectCreationLimitReachedStatus<
+ * MyObjectCreationLimitReachedStatus,
+ * MyObjectCreationLimitReachedStatus.Builder
+ * >(objectCreationLimitReachedStatus) {
+ *
+ * override val selfTypeName =
+ * "MyObjectCreationLimitReachedStatus"
+ *
+ * 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 :
+ * AbstractObjectCreationLimitReachedStatus.Builder<
+ * Builder,
+ * MyObjectCreationLimitReachedStatus> {...}
+ * }
+ * ```
+ *
+ * Also see [AbstractObjectCreationLimitReachedStatus.Builder].
+ */
+@Suppress("UNCHECKED_CAST")
+public abstract class AbstractObjectCreationLimitReachedStatus<
+ Self : AbstractObjectCreationLimitReachedStatus<Self, Builder>,
+ Builder : AbstractObjectCreationLimitReachedStatus.Builder<Builder, Self>>
+internal constructor(
+ public final override val disambiguatingDescription: DisambiguatingDescription?,
+ public final override val identifier: String?,
+ public final override val name: Name?,
+) : ObjectCreationLimitReachedStatus {
+ /**
+ * 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 [ObjectCreationLimitReachedStatus]
+ * instance.
+ */
+ public constructor(
+ objectCreationLimitReachedStatus: ObjectCreationLimitReachedStatus
+ ) : this(
+ objectCreationLimitReachedStatus.disambiguatingDescription,
+ objectCreationLimitReachedStatus.identifier,
+ objectCreationLimitReachedStatus.name
+ )
+
+ /**
+ * Returns a concrete [Builder] with the additional, non-[ObjectCreationLimitReachedStatus]
+ * 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)"""
+ }
+
+ /**
+ * An abstract implementation of [ObjectCreationLimitReachedStatus.Builder].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MyObjectCreationLimitReachedStatus :
+ * : AbstractObjectCreationLimitReachedStatus<
+ * MyObjectCreationLimitReachedStatus,
+ * MyObjectCreationLimitReachedStatus.Builder>(...) {
+ *
+ * class Builder
+ * : Builder<
+ * Builder,
+ * MyObjectCreationLimitReachedStatus
+ * >() {
+ * private var foo: String? = null
+ * private val bars = mutableListOf<Int>()
+ *
+ * override val selfTypeName =
+ * "MyObjectCreationLimitReachedStatus.Builder"
+ *
+ * override val additionalProperties: Map<String, Any?>
+ * get() = mapOf("foo" to foo, "bars" to bars)
+ *
+ * override fun buildFromObjectCreationLimitReachedStatus(
+ * objectCreationLimitReachedStatus: ObjectCreationLimitReachedStatus
+ * ): MyObjectCreationLimitReachedStatus {
+ * return MyObjectCreationLimitReachedStatus(
+ * objectCreationLimitReachedStatus,
+ * 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 [AbstractObjectCreationLimitReachedStatus].
+ */
+ @Suppress("StaticFinalBuilder")
+ public abstract class Builder<
+ Self : Builder<Self, Built>, Built : AbstractObjectCreationLimitReachedStatus<Built, Self>> :
+ ObjectCreationLimitReachedStatus.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 [ObjectCreationLimitReachedStatus].
+ *
+ * Subclasses should override this method to build a concrete [Built] instance that holds both
+ * the [ObjectCreationLimitReachedStatus]-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 buildFromObjectCreationLimitReachedStatus(
+ objectCreationLimitReachedStatus: ObjectCreationLimitReachedStatus
+ ): Built
+
+ public final override fun build(): Built =
+ buildFromObjectCreationLimitReachedStatus(
+ ObjectCreationLimitReachedStatusImpl(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 ObjectCreationLimitReachedStatusImpl :
+ AbstractObjectCreationLimitReachedStatus<
+ ObjectCreationLimitReachedStatusImpl, ObjectCreationLimitReachedStatusImpl.Builder
+ > {
+ protected override val selfTypeName: String
+ get() = "ObjectCreationLimitReachedStatus"
+
+ protected override val additionalProperties: Map<String, Any?>
+ get() = emptyMap()
+
+ public constructor(
+ disambiguatingDescription: DisambiguatingDescription?,
+ identifier: String?,
+ name: Name?,
+ ) : super(disambiguatingDescription, identifier, name)
+
+ public constructor(
+ objectCreationLimitReachedStatus: ObjectCreationLimitReachedStatus
+ ) : super(objectCreationLimitReachedStatus)
+
+ protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
+
+ internal class Builder :
+ AbstractObjectCreationLimitReachedStatus.Builder<
+ Builder, ObjectCreationLimitReachedStatusImpl
+ >() {
+ protected override val selfTypeName: String
+ get() = "ObjectCreationLimitReachedStatus.Builder"
+
+ protected override val additionalProperties: Map<String, Any?>
+ get() = emptyMap()
+
+ protected override fun buildFromObjectCreationLimitReachedStatus(
+ objectCreationLimitReachedStatus: ObjectCreationLimitReachedStatus
+ ): ObjectCreationLimitReachedStatusImpl =
+ objectCreationLimitReachedStatus as? ObjectCreationLimitReachedStatusImpl
+ ?: ObjectCreationLimitReachedStatusImpl(objectCreationLimitReachedStatus)
+ }
+}
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
index 37403bb..dc96036 100644
--- 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
@@ -35,10 +35,14 @@
* 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.
+ * using [Companion.Builder] or see [AbstractPerson] if you need to extend this type.
*/
public interface Person : Thing {
- /** Email address. */
+ /**
+ * Email address.
+ *
+ * See http://schema.org/email for more context.
+ */
public val email: String?
/** Converts this [Person] to its builder with all the properties copied over. */
@@ -53,7 +57,7 @@
* 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.
+ * [AbstractPerson.Builder] if you need to extend this builder.
*/
public interface Builder<Self : Builder<Self>> : Thing.Builder<Self> {
/** Returns a built [Person]. */
@@ -65,7 +69,7 @@
}
/**
- * A generic implementation of [Person].
+ * An abstract implementation of [Person].
*
* Allows for extension like:
* ```kt
@@ -73,7 +77,7 @@
* person: Person,
* val foo: String,
* val bars: List<Int>,
- * ) : GenericPerson<
+ * ) : AbstractPerson<
* MyPerson,
* MyPerson.Builder
* >(person) {
@@ -91,17 +95,17 @@
* }
*
* class Builder :
- * GenericPerson.Builder<
+ * AbstractPerson.Builder<
* Builder,
* MyPerson> {...}
* }
* ```
*
- * Also see [GenericPerson.Builder].
+ * Also see [AbstractPerson.Builder].
*/
@Suppress("UNCHECKED_CAST")
-public abstract class GenericPerson<
- Self : GenericPerson<Self, Builder>, Builder : GenericPerson.Builder<Builder, Self>>
+public abstract class AbstractPerson<
+ Self : AbstractPerson<Self, Builder>, Builder : AbstractPerson.Builder<Builder, Self>>
internal constructor(
public final override val email: String?,
public final override val disambiguatingDescription: DisambiguatingDescription?,
@@ -173,12 +177,12 @@
}
/**
- * A generic implementation of [Person.Builder].
+ * An abstract implementation of [Person.Builder].
*
* Allows for extension like:
* ```kt
* class MyPerson :
- * : GenericPerson<
+ * : AbstractPerson<
* MyPerson,
* MyPerson.Builder>(...) {
*
@@ -221,10 +225,10 @@
* }
* ```
*
- * Also see [GenericPerson].
+ * Also see [AbstractPerson].
*/
@Suppress("StaticFinalBuilder")
- public abstract class Builder<Self : Builder<Self, Built>, Built : GenericPerson<Built, Self>> :
+ public abstract class Builder<Self : Builder<Self, Built>, Built : AbstractPerson<Built, Self>> :
Person.Builder<Self> {
/**
* Human readable name for the concrete [Self] class.
@@ -324,7 +328,7 @@
}
}
-internal class PersonImpl : GenericPerson<PersonImpl, PersonImpl.Builder> {
+internal class PersonImpl : AbstractPerson<PersonImpl, PersonImpl.Builder> {
protected override val selfTypeName: String
get() = "Person"
@@ -342,7 +346,7 @@
protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
- internal class Builder : GenericPerson.Builder<Builder, PersonImpl>() {
+ internal class Builder : AbstractPerson.Builder<Builder, PersonImpl>() {
protected override val selfTypeName: String
get() = "Person.Builder"
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
index 216380d..73525a2 100644
--- 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
@@ -59,21 +59,29 @@
* 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.
+ * using [Companion.Builder] or see [AbstractSchedule] 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. */
+ /**
+ * Defines the day(s) of the week on which a recurring Event takes place.
+ *
+ * See http://schema.org/byDay for more context.
+ */
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.
+ *
+ * See http://schema.org/byMonth for more context.
*/
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.
+ *
+ * See http://schema.org/byMonthDay for more context.
*/
public val byMonthDays: List<Long>
@@ -81,10 +89,16 @@
* 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.
+ *
+ * See http://schema.org/byMonthWeek for more context.
*/
public val byMonthWeeks: List<Long>
- /** The end date and time of the item. */
+ /**
+ * The end date and time of the item.
+ *
+ * See http://schema.org/endDate for more context.
+ */
public val endDate: EndDate?
/**
@@ -94,6 +108,8 @@
* 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 more context.
*/
public val endTime: EndTime?
@@ -104,25 +120,39 @@
* 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 more context.
*/
public val exceptDate: ExceptDate?
- /** Defines the number of times a recurring `Event` will take place. */
+ /**
+ * Defines the number of times a recurring `Event` will take place.
+ *
+ * See http://schema.org/repeatCount for more context.
+ */
@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.
+ *
+ * See http://schema.org/repeatFrequency for more context.
*/
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.
+ *
+ * See http://schema.org/scheduleTimezone for more context.
*/
public val scheduleTimezone: String?
- /** The start date and time of the item. */
+ /**
+ * The start date and time of the item.
+ *
+ * See http://schema.org/startDate for more context.
+ */
public val startDate: StartDate?
/**
@@ -132,6 +162,8 @@
* 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 more context.
*/
public val startTime: StartTime?
@@ -147,7 +179,7 @@
* 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.
+ * [AbstractSchedule.Builder] if you need to extend this builder.
*/
public interface Builder<Self : Builder<Self>> : Intangible.Builder<Self> {
/** Returns a built [Schedule]. */
@@ -280,7 +312,7 @@
}
/**
- * A generic implementation of [Schedule].
+ * An abstract implementation of [Schedule].
*
* Allows for extension like:
* ```kt
@@ -288,7 +320,7 @@
* schedule: Schedule,
* val foo: String,
* val bars: List<Int>,
- * ) : GenericSchedule<
+ * ) : AbstractSchedule<
* MySchedule,
* MySchedule.Builder
* >(schedule) {
@@ -306,17 +338,17 @@
* }
*
* class Builder :
- * GenericSchedule.Builder<
+ * AbstractSchedule.Builder<
* Builder,
* MySchedule> {...}
* }
* ```
*
- * Also see [GenericSchedule.Builder].
+ * Also see [AbstractSchedule.Builder].
*/
@Suppress("UNCHECKED_CAST")
-public abstract class GenericSchedule<
- Self : GenericSchedule<Self, Builder>, Builder : GenericSchedule.Builder<Builder, Self>>
+public abstract class AbstractSchedule<
+ Self : AbstractSchedule<Self, Builder>, Builder : AbstractSchedule.Builder<Builder, Self>>
internal constructor(
public final override val byDays: List<ByDay>,
public final override val byMonths: List<Long>,
@@ -487,12 +519,12 @@
}
/**
- * A generic implementation of [Schedule.Builder].
+ * An abstract implementation of [Schedule.Builder].
*
* Allows for extension like:
* ```kt
* class MySchedule :
- * : GenericSchedule<
+ * : AbstractSchedule<
* MySchedule,
* MySchedule.Builder>(...) {
*
@@ -535,11 +567,11 @@
* }
* ```
*
- * Also see [GenericSchedule].
+ * Also see [AbstractSchedule].
*/
@Suppress("StaticFinalBuilder")
- public abstract class Builder<Self : Builder<Self, Built>, Built : GenericSchedule<Built, Self>> :
- Schedule.Builder<Self> {
+ public abstract class Builder<
+ Self : Builder<Self, Built>, Built : AbstractSchedule<Built, Self>> : Schedule.Builder<Self> {
/**
* Human readable name for the concrete [Self] class.
*
@@ -834,7 +866,7 @@
}
}
-internal class ScheduleImpl : GenericSchedule<ScheduleImpl, ScheduleImpl.Builder> {
+internal class ScheduleImpl : AbstractSchedule<ScheduleImpl, ScheduleImpl.Builder> {
protected override val selfTypeName: String
get() = "Schedule"
@@ -879,7 +911,7 @@
protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
- internal class Builder : GenericSchedule.Builder<Builder, ScheduleImpl>() {
+ internal class Builder : AbstractSchedule.Builder<Builder, ScheduleImpl>() {
protected override val selfTypeName: String
get() = "Schedule.Builder"
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/SuccessStatus.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/SuccessStatus.kt
new file mode 100644
index 0000000..539acaf
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/SuccessStatus.kt
@@ -0,0 +1,337 @@
+// 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
+
+/**
+ * Status indicating that the task was executed successfully.
+ *
+ * See http://schema.googleapis.com/SuccessStatus for context.
+ *
+ * Should not be directly implemented. More properties may be added over time. Instead consider
+ * using [Companion.Builder] or see [AbstractSuccessStatus] if you need to extend this type.
+ */
+public interface SuccessStatus : ExecutionStatus {
+ /** Converts this [SuccessStatus] 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<*> = SuccessStatusImpl.Builder()
+ }
+
+ /**
+ * Builder for [SuccessStatus].
+ *
+ * Should not be directly implemented. More methods may be added over time. See
+ * [AbstractSuccessStatus.Builder] if you need to extend this builder.
+ */
+ public interface Builder<Self : Builder<Self>> : ExecutionStatus.Builder<Self> {
+ /** Returns a built [SuccessStatus]. */
+ public override fun build(): SuccessStatus
+ }
+}
+
+/**
+ * An abstract implementation of [SuccessStatus].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MySuccessStatus internal constructor(
+ * successStatus: SuccessStatus,
+ * val foo: String,
+ * val bars: List<Int>,
+ * ) : AbstractSuccessStatus<
+ * MySuccessStatus,
+ * MySuccessStatus.Builder
+ * >(successStatus) {
+ *
+ * override val selfTypeName =
+ * "MySuccessStatus"
+ *
+ * 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 :
+ * AbstractSuccessStatus.Builder<
+ * Builder,
+ * MySuccessStatus> {...}
+ * }
+ * ```
+ *
+ * Also see [AbstractSuccessStatus.Builder].
+ */
+@Suppress("UNCHECKED_CAST")
+public abstract class AbstractSuccessStatus<
+ Self : AbstractSuccessStatus<Self, Builder>,
+ Builder : AbstractSuccessStatus.Builder<Builder, Self>>
+internal constructor(
+ public final override val disambiguatingDescription: DisambiguatingDescription?,
+ public final override val identifier: String?,
+ public final override val name: Name?,
+) : SuccessStatus {
+ /**
+ * 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 [SuccessStatus] instance. */
+ public constructor(
+ successStatus: SuccessStatus
+ ) : this(successStatus.disambiguatingDescription, successStatus.identifier, successStatus.name)
+
+ /**
+ * Returns a concrete [Builder] with the additional, non-[SuccessStatus] 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)"""
+ }
+
+ /**
+ * An abstract implementation of [SuccessStatus.Builder].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MySuccessStatus :
+ * : AbstractSuccessStatus<
+ * MySuccessStatus,
+ * MySuccessStatus.Builder>(...) {
+ *
+ * class Builder
+ * : Builder<
+ * Builder,
+ * MySuccessStatus
+ * >() {
+ * private var foo: String? = null
+ * private val bars = mutableListOf<Int>()
+ *
+ * override val selfTypeName =
+ * "MySuccessStatus.Builder"
+ *
+ * override val additionalProperties: Map<String, Any?>
+ * get() = mapOf("foo" to foo, "bars" to bars)
+ *
+ * override fun buildFromSuccessStatus(
+ * successStatus: SuccessStatus
+ * ): MySuccessStatus {
+ * return MySuccessStatus(
+ * successStatus,
+ * 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 [AbstractSuccessStatus].
+ */
+ @Suppress("StaticFinalBuilder")
+ public abstract class Builder<
+ Self : Builder<Self, Built>, Built : AbstractSuccessStatus<Built, Self>> :
+ SuccessStatus.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 [SuccessStatus].
+ *
+ * Subclasses should override this method to build a concrete [Built] instance that holds both
+ * the [SuccessStatus]-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 buildFromSuccessStatus(successStatus: SuccessStatus): Built
+
+ public final override fun build(): Built =
+ buildFromSuccessStatus(SuccessStatusImpl(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 SuccessStatusImpl :
+ AbstractSuccessStatus<SuccessStatusImpl, SuccessStatusImpl.Builder> {
+ protected override val selfTypeName: String
+ get() = "SuccessStatus"
+
+ protected override val additionalProperties: Map<String, Any?>
+ get() = emptyMap()
+
+ public constructor(
+ disambiguatingDescription: DisambiguatingDescription?,
+ identifier: String?,
+ name: Name?,
+ ) : super(disambiguatingDescription, identifier, name)
+
+ public constructor(successStatus: SuccessStatus) : super(successStatus)
+
+ protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
+
+ internal class Builder : AbstractSuccessStatus.Builder<Builder, SuccessStatusImpl>() {
+ protected override val selfTypeName: String
+ get() = "SuccessStatus.Builder"
+
+ protected override val additionalProperties: Map<String, Any?>
+ get() = emptyMap()
+
+ protected override fun buildFromSuccessStatus(successStatus: SuccessStatus): SuccessStatusImpl =
+ successStatus as? SuccessStatusImpl ?: SuccessStatusImpl(successStatus)
+ }
+}
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 3080c42..d39cd73 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
@@ -35,23 +35,31 @@
* See http://schema.org/Thing for context.
*
* Should not be directly implemented. More properties may be added over time. Instead consider
- * using [Companion.Builder] or see [GenericThing] if you need to extend this type.
+ * using [Companion.Builder] or see [AbstractThing] if you need to extend this type.
*/
public interface Thing {
/**
* 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
* description to be useful for disambiguation.
+ *
+ * See http://schema.org/disambiguatingDescription for more context.
*/
public val disambiguatingDescription: DisambiguatingDescription?
/**
* The identifier property represents any kind of identifier for any kind of Thing, such as ISBNs,
* GTIN codes, UUIDs etc.
+ *
+ * See http://schema.org/identifier for more context.
*/
public val identifier: String?
- /** The name of the item. */
+ /**
+ * The name of the item.
+ *
+ * See http://schema.org/name for more context.
+ */
public val name: Name?
/** Converts this [Thing] to its builder with all the properties copied over. */
@@ -66,7 +74,7 @@
* Builder for [Thing].
*
* Should not be directly implemented. More methods may be added over time. See
- * [GenericThing.Builder] if you need to extend this builder.
+ * [AbstractThing.Builder] if you need to extend this builder.
*/
@Suppress("StaticFinalBuilder")
public interface Builder<Self : Builder<Self>> {
@@ -94,7 +102,7 @@
}
/**
- * A generic implementation of [Thing].
+ * An abstract implementation of [Thing].
*
* Allows for extension like:
* ```kt
@@ -102,7 +110,7 @@
* thing: Thing,
* val foo: String,
* val bars: List<Int>,
- * ) : GenericThing<
+ * ) : AbstractThing<
* MyThing,
* MyThing.Builder
* >(thing) {
@@ -120,17 +128,17 @@
* }
*
* class Builder :
- * GenericThing.Builder<
+ * AbstractThing.Builder<
* Builder,
* MyThing> {...}
* }
* ```
*
- * Also see [GenericThing.Builder].
+ * Also see [AbstractThing.Builder].
*/
@Suppress("UNCHECKED_CAST")
-public abstract class GenericThing<
- Self : GenericThing<Self, Builder>, Builder : GenericThing.Builder<Builder, Self>>
+public abstract class AbstractThing<
+ Self : AbstractThing<Self, Builder>, Builder : AbstractThing.Builder<Builder, Self>>
internal constructor(
public final override val disambiguatingDescription: DisambiguatingDescription?,
public final override val identifier: String?,
@@ -196,12 +204,12 @@
}
/**
- * A generic implementation of [Thing.Builder].
+ * An abstract implementation of [Thing.Builder].
*
* Allows for extension like:
* ```kt
* class MyThing :
- * : GenericThing<
+ * : AbstractThing<
* MyThing,
* MyThing.Builder>(...) {
*
@@ -244,10 +252,10 @@
* }
* ```
*
- * Also see [GenericThing].
+ * Also see [AbstractThing].
*/
@Suppress("StaticFinalBuilder")
- public abstract class Builder<Self : Builder<Self, Built>, Built : GenericThing<Built, Self>> :
+ public abstract class Builder<Self : Builder<Self, Built>, Built : AbstractThing<Built, Self>> :
Thing.Builder<Self> {
/**
* Human readable name for the concrete [Self] class.
@@ -336,7 +344,7 @@
}
}
-internal class ThingImpl : GenericThing<ThingImpl, ThingImpl.Builder> {
+internal class ThingImpl : AbstractThing<ThingImpl, ThingImpl.Builder> {
protected override val selfTypeName: String
get() = "Thing"
@@ -353,7 +361,7 @@
protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
- internal class Builder : GenericThing.Builder<Builder, ThingImpl>() {
+ internal class Builder : AbstractThing.Builder<Builder, ThingImpl>() {
protected override val selfTypeName: String
get() = "Thing.Builder"
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
index b9d5de4..434fdf6 100644
--- 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
@@ -36,10 +36,14 @@
* 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.
+ * using [Companion.Builder] or see [AbstractTimer] if you need to extend this type.
*/
public interface Timer : Thing {
- /** The duration of the item (movie, audio recording, event, etc.). */
+ /**
+ * The duration of the item (movie, audio recording, event, etc.).
+ *
+ * See http://schema.org/duration for more context.
+ */
public val duration: Duration?
/** Converts this [Timer] to its builder with all the properties copied over. */
@@ -54,7 +58,7 @@
* 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.
+ * [AbstractTimer.Builder] if you need to extend this builder.
*/
public interface Builder<Self : Builder<Self>> : Thing.Builder<Self> {
/** Returns a built [Timer]. */
@@ -66,7 +70,7 @@
}
/**
- * A generic implementation of [Timer].
+ * An abstract implementation of [Timer].
*
* Allows for extension like:
* ```kt
@@ -74,7 +78,7 @@
* timer: Timer,
* val foo: String,
* val bars: List<Int>,
- * ) : GenericTimer<
+ * ) : AbstractTimer<
* MyTimer,
* MyTimer.Builder
* >(timer) {
@@ -92,17 +96,17 @@
* }
*
* class Builder :
- * GenericTimer.Builder<
+ * AbstractTimer.Builder<
* Builder,
* MyTimer> {...}
* }
* ```
*
- * Also see [GenericTimer.Builder].
+ * Also see [AbstractTimer.Builder].
*/
@Suppress("UNCHECKED_CAST")
-public abstract class GenericTimer<
- Self : GenericTimer<Self, Builder>, Builder : GenericTimer.Builder<Builder, Self>>
+public abstract class AbstractTimer<
+ Self : AbstractTimer<Self, Builder>, Builder : AbstractTimer.Builder<Builder, Self>>
internal constructor(
public final override val duration: Duration?,
public final override val disambiguatingDescription: DisambiguatingDescription?,
@@ -174,12 +178,12 @@
}
/**
- * A generic implementation of [Timer.Builder].
+ * An abstract implementation of [Timer.Builder].
*
* Allows for extension like:
* ```kt
* class MyTimer :
- * : GenericTimer<
+ * : AbstractTimer<
* MyTimer,
* MyTimer.Builder>(...) {
*
@@ -222,10 +226,10 @@
* }
* ```
*
- * Also see [GenericTimer].
+ * Also see [AbstractTimer].
*/
@Suppress("StaticFinalBuilder")
- public abstract class Builder<Self : Builder<Self, Built>, Built : GenericTimer<Built, Self>> :
+ public abstract class Builder<Self : Builder<Self, Built>, Built : AbstractTimer<Built, Self>> :
Timer.Builder<Self> {
/**
* Human readable name for the concrete [Self] class.
@@ -325,7 +329,7 @@
}
}
-internal class TimerImpl : GenericTimer<TimerImpl, TimerImpl.Builder> {
+internal class TimerImpl : AbstractTimer<TimerImpl, TimerImpl.Builder> {
protected override val selfTypeName: String
get() = "Timer"
@@ -343,7 +347,7 @@
protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
- internal class Builder : GenericTimer.Builder<Builder, TimerImpl>() {
+ internal class Builder : AbstractTimer.Builder<Builder, TimerImpl>() {
protected override val selfTypeName: String
get() = "Timer.Builder"
diff --git a/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/UnsupportedOperationStatus.kt b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/UnsupportedOperationStatus.kt
new file mode 100644
index 0000000..173eda4
--- /dev/null
+++ b/appactions/builtintypes/builtintypes-core/src/main/java/androidx/appactions/builtintypes/types/UnsupportedOperationStatus.kt
@@ -0,0 +1,361 @@
+// 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
+
+/**
+ * Status indicating that the operation is not supported, e.g. updating an unsupported field.
+ *
+ * See http://schema.googleapis.com/UnsupportedOperationStatus for context.
+ *
+ * Should not be directly implemented. More properties may be added over time. Instead consider
+ * using [Companion.Builder] or see [AbstractUnsupportedOperationStatus] if you need to extend this
+ * type.
+ */
+public interface UnsupportedOperationStatus : ExecutionStatus {
+ /**
+ * Converts this [UnsupportedOperationStatus] 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<*> = UnsupportedOperationStatusImpl.Builder()
+ }
+
+ /**
+ * Builder for [UnsupportedOperationStatus].
+ *
+ * Should not be directly implemented. More methods may be added over time. See
+ * [AbstractUnsupportedOperationStatus.Builder] if you need to extend this builder.
+ */
+ public interface Builder<Self : Builder<Self>> : ExecutionStatus.Builder<Self> {
+ /** Returns a built [UnsupportedOperationStatus]. */
+ public override fun build(): UnsupportedOperationStatus
+ }
+}
+
+/**
+ * An abstract implementation of [UnsupportedOperationStatus].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MyUnsupportedOperationStatus internal constructor(
+ * unsupportedOperationStatus: UnsupportedOperationStatus,
+ * val foo: String,
+ * val bars: List<Int>,
+ * ) : AbstractUnsupportedOperationStatus<
+ * MyUnsupportedOperationStatus,
+ * MyUnsupportedOperationStatus.Builder
+ * >(unsupportedOperationStatus) {
+ *
+ * override val selfTypeName =
+ * "MyUnsupportedOperationStatus"
+ *
+ * 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 :
+ * AbstractUnsupportedOperationStatus.Builder<
+ * Builder,
+ * MyUnsupportedOperationStatus> {...}
+ * }
+ * ```
+ *
+ * Also see [AbstractUnsupportedOperationStatus.Builder].
+ */
+@Suppress("UNCHECKED_CAST")
+public abstract class AbstractUnsupportedOperationStatus<
+ Self : AbstractUnsupportedOperationStatus<Self, Builder>,
+ Builder : AbstractUnsupportedOperationStatus.Builder<Builder, Self>>
+internal constructor(
+ public final override val disambiguatingDescription: DisambiguatingDescription?,
+ public final override val identifier: String?,
+ public final override val name: Name?,
+) : UnsupportedOperationStatus {
+ /**
+ * 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 [UnsupportedOperationStatus]
+ * instance.
+ */
+ public constructor(
+ unsupportedOperationStatus: UnsupportedOperationStatus
+ ) : this(
+ unsupportedOperationStatus.disambiguatingDescription,
+ unsupportedOperationStatus.identifier,
+ unsupportedOperationStatus.name
+ )
+
+ /**
+ * Returns a concrete [Builder] with the additional, non-[UnsupportedOperationStatus] 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)"""
+ }
+
+ /**
+ * An abstract implementation of [UnsupportedOperationStatus.Builder].
+ *
+ * Allows for extension like:
+ * ```kt
+ * class MyUnsupportedOperationStatus :
+ * : AbstractUnsupportedOperationStatus<
+ * MyUnsupportedOperationStatus,
+ * MyUnsupportedOperationStatus.Builder>(...) {
+ *
+ * class Builder
+ * : Builder<
+ * Builder,
+ * MyUnsupportedOperationStatus
+ * >() {
+ * private var foo: String? = null
+ * private val bars = mutableListOf<Int>()
+ *
+ * override val selfTypeName =
+ * "MyUnsupportedOperationStatus.Builder"
+ *
+ * override val additionalProperties: Map<String, Any?>
+ * get() = mapOf("foo" to foo, "bars" to bars)
+ *
+ * override fun buildFromUnsupportedOperationStatus(
+ * unsupportedOperationStatus: UnsupportedOperationStatus
+ * ): MyUnsupportedOperationStatus {
+ * return MyUnsupportedOperationStatus(
+ * unsupportedOperationStatus,
+ * 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 [AbstractUnsupportedOperationStatus].
+ */
+ @Suppress("StaticFinalBuilder")
+ public abstract class Builder<
+ Self : Builder<Self, Built>, Built : AbstractUnsupportedOperationStatus<Built, Self>> :
+ UnsupportedOperationStatus.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 [UnsupportedOperationStatus].
+ *
+ * Subclasses should override this method to build a concrete [Built] instance that holds both
+ * the [UnsupportedOperationStatus]-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 buildFromUnsupportedOperationStatus(
+ unsupportedOperationStatus: UnsupportedOperationStatus
+ ): Built
+
+ public final override fun build(): Built =
+ buildFromUnsupportedOperationStatus(
+ UnsupportedOperationStatusImpl(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 UnsupportedOperationStatusImpl :
+ AbstractUnsupportedOperationStatus<
+ UnsupportedOperationStatusImpl, UnsupportedOperationStatusImpl.Builder
+ > {
+ protected override val selfTypeName: String
+ get() = "UnsupportedOperationStatus"
+
+ protected override val additionalProperties: Map<String, Any?>
+ get() = emptyMap()
+
+ public constructor(
+ disambiguatingDescription: DisambiguatingDescription?,
+ identifier: String?,
+ name: Name?,
+ ) : super(disambiguatingDescription, identifier, name)
+
+ public constructor(
+ unsupportedOperationStatus: UnsupportedOperationStatus
+ ) : super(unsupportedOperationStatus)
+
+ protected override fun toBuilderWithAdditionalPropertiesOnly(): Builder = Builder()
+
+ internal class Builder :
+ AbstractUnsupportedOperationStatus.Builder<Builder, UnsupportedOperationStatusImpl>() {
+ protected override val selfTypeName: String
+ get() = "UnsupportedOperationStatus.Builder"
+
+ protected override val additionalProperties: Map<String, Any?>
+ get() = emptyMap()
+
+ protected override fun buildFromUnsupportedOperationStatus(
+ unsupportedOperationStatus: UnsupportedOperationStatus
+ ): UnsupportedOperationStatusImpl =
+ unsupportedOperationStatus as? UnsupportedOperationStatusImpl
+ ?: UnsupportedOperationStatusImpl(unsupportedOperationStatus)
+ }
+}
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 87ed941..56ae906 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
@@ -25,7 +25,7 @@
class ExtensionTest {
class MyThing internal constructor(thing: Thing, val foo: String?, val bars: List<Int>) :
- GenericThing<MyThing, MyThing.Builder>(thing) {
+ AbstractThing<MyThing, MyThing.Builder>(thing) {
override val selfTypeName = "MyThing"
override val additionalProperties: Map<String, Any?>
get() = mapOf("foo" to foo, "bars" to bars)
@@ -34,7 +34,7 @@
return Builder().setFoo(foo).addBars(bars)
}
- class Builder : GenericThing.Builder<Builder, MyThing>() {
+ class Builder : AbstractThing.Builder<Builder, MyThing>() {
private var foo: String? = null
private val bars: MutableList<Int> = mutableListOf()
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Api21.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Api21.kt
index adb0d14..745a4a9 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Api21.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Api21.kt
@@ -22,13 +22,15 @@
import android.os.Debug
import android.os.Environment
import androidx.annotation.RequiresApi
+import androidx.annotation.RestrictTo
import java.io.File
internal fun startMethodTracingSampling(tracePath: String, bufferSize: Int, intervalUs: Int) {
Debug.startMethodTracingSampling(tracePath, bufferSize, intervalUs)
}
-internal fun Context.getFirstMountedMediaDir(): File? {
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+fun Context.getFirstMountedMediaDir(): File? {
@Suppress("DEPRECATION")
return externalMediaDirs.firstOrNull {
Environment.getExternalStorageState(it) == Environment.MEDIA_MOUNTED
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
index 5b3fe34..126070c 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
@@ -64,6 +64,7 @@
val killProcessDelayMillis: Long
val enableStartupProfiles: Boolean
val strictStartupProfiles: Boolean
+ val methodTracingOptions: String
val dryRunMode: Boolean
// internal properties are microbenchmark only
@@ -196,6 +197,9 @@
strictStartupProfiles =
arguments.getBenchmarkArgument("startupProfiles.strict")?.toBoolean() ?: false
+
+ methodTracingOptions =
+ arguments.getBenchmarkArgument("methodTracing.options") ?: ""
}
fun throwIfError() {
diff --git a/benchmark/benchmark-internal/build.gradle b/benchmark/benchmark-internal/build.gradle
new file mode 100644
index 0000000..45da453
--- /dev/null
+++ b/benchmark/benchmark-internal/build.gradle
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+import androidx.build.Publish
+
+plugins {
+ id("AndroidXPlugin")
+ id("com.android.library")
+ id("kotlin-android")
+}
+
+android {
+ namespace "androidx.benchmark.internal"
+}
+
+dependencies {
+ implementation(libs.kotlinStdlib)
+ api("androidx.annotation:annotation:1.1.0")
+ api("androidx.annotation:annotation-experimental:1.0.0")
+ implementation("androidx.tracing:tracing-ktx:1.0.0")
+ implementation(libs.testMonitor)
+ androidTestImplementation(libs.testRules)
+ androidTestImplementation(libs.testExtJunit)
+ androidTestImplementation(libs.kotlinTest)
+}
+
+androidx {
+ name = "Benchmark - Internal"
+ publish = Publish.SNAPSHOT_ONLY
+ inceptionYear = "2023"
+ description = "Android Benchmark - Internal"
+}
diff --git a/benchmark/benchmark-internal/src/main/AndroidManifest.xml b/benchmark/benchmark-internal/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..819d8da
--- /dev/null
+++ b/benchmark/benchmark-internal/src/main/AndroidManifest.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ ~ Copyright (C) 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.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <application>
+ <receiver
+ android:name=".MethodTracingReceiver"
+ android:directBootAware="false"
+ android:enabled="true"
+ android:exported="true"
+ android:permission="android.permission.DUMP">
+ <intent-filter>
+ <action android:name="androidx.benchmark.experiments.ACTION_METHOD_TRACE" />
+ </intent-filter>
+ </receiver>
+ </application>
+
+ <!-- Needed to dump the method traces. -->
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+</manifest>
diff --git a/benchmark/benchmark-internal/src/main/java/androidx/benchmark/internal/MethodTracingReceiver.kt b/benchmark/benchmark-internal/src/main/java/androidx/benchmark/internal/MethodTracingReceiver.kt
new file mode 100644
index 0000000..9cbc912
--- /dev/null
+++ b/benchmark/benchmark-internal/src/main/java/androidx/benchmark/internal/MethodTracingReceiver.kt
@@ -0,0 +1,168 @@
+/*
+ * 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.benchmark.internal
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.os.Build
+import android.os.Debug
+import android.os.Environment
+import android.util.Log
+import androidx.annotation.DoNotInline
+import androidx.annotation.RequiresApi
+import androidx.benchmark.internal.MethodTracingApi21.getFirstMountedMediaDir
+import java.io.File
+
+/**
+ * Used to toggle method tracing on the application.
+ */
+class MethodTracingReceiver : BroadcastReceiver() {
+ override fun onReceive(context: Context, intent: Intent?) {
+ val intentAction = intent?.action ?: ""
+ if (intentAction != ACTION_METHOD_TRACE) {
+ val message = "Unknown action $intentAction"
+ Log.w(TAG, message)
+ resultCode = RESULT_CODE_FAILED
+ return
+ }
+ methodTracingRequest(context, intent)
+ }
+
+ private fun methodTracingRequest(context: Context, intent: Intent?) {
+ val packageName = context.packageName
+ val extras = intent?.extras
+ val action = extras?.getString(ACTION)
+ val fileName = extras?.getString(UNIQUE_NAME)
+ if (action.isNullOrBlank()) {
+ Log.d(TAG, "Unknown action.")
+ resultCode = RESULT_CODE_FAILED
+ return
+ }
+ when (action) {
+ METHOD_TRACE_START_SAMPLED -> {
+ require(!fileName.isNullOrBlank()) {
+ Log.d(TAG, "Missing output file name")
+ resultCode = RESULT_CODE_FAILED
+ return
+ }
+ if (Build.VERSION.SDK_INT >= 21) {
+ MethodTracingApi21.startMethodTracingSampling(
+ tracePath = outputTracePath(context, fileName),
+ bufferSize = BUFFER_SIZE_BYTES,
+ intervalUs = INTERVAL_MICRO_SECONDS
+ )
+ } else {
+ // Fallback
+ startMethodTracing(fileName, context)
+ }
+ }
+
+ METHOD_TRACE_START -> {
+ startMethodTracing(fileName, context)
+ }
+
+ METHOD_TRACE_END -> {
+ Log.d(TAG, "Stopping method tracing for $packageName")
+ Debug.stopMethodTracing()
+ resultCode = RESULT_CODE_SUCCESS
+ }
+
+ else -> {
+ Log.w(TAG, "Unknown request: $intent")
+ resultCode = RESULT_CODE_FAILED
+ }
+ }
+ }
+
+ private fun startMethodTracing(fileName: String?, context: Context) {
+ require(!fileName.isNullOrBlank()) {
+ Log.d(TAG, "Missing output file name")
+ resultCode = RESULT_CODE_FAILED
+ return
+ }
+ Debug.startMethodTracing(
+ outputTracePath(context, fileName),
+ BUFFER_SIZE_BYTES
+ )
+ Log.d(TAG, "Enabling method tracing on ${context.packageName} ($fileName)")
+ resultCode = RESULT_CODE_SUCCESS
+ }
+
+ companion object {
+ private const val TAG = "MethodTracingReceiver"
+
+ // Intents
+ private const val ACTION_METHOD_TRACE = "androidx.benchmark.experiments.ACTION_METHOD_TRACE"
+
+ // Extras
+ private const val ACTION = "ACTION"
+ private const val UNIQUE_NAME = "UNIQUE_NAME"
+
+ // Actions
+ private const val METHOD_TRACE_START = "METHOD_TRACE_START"
+ private const val METHOD_TRACE_START_SAMPLED = "METHOD_TRACE_START_SAMPLED"
+ private const val METHOD_TRACE_END = "ACTION_METHOD_TRACE_END"
+
+ // Result codes
+ private const val RESULT_CODE_FAILED = 0
+ private const val RESULT_CODE_SUCCESS = 10
+
+ // Tracing
+ internal fun outputTracePath(context: Context, fileName: String): String {
+ val basePath = if (Build.VERSION.SDK_INT >= 21) {
+ context.getFirstMountedMediaDir()
+ } else {
+ null
+ }
+ val file = File(basePath, fileName)
+ // Delete file if already exists.
+ file.delete()
+ return file.absolutePath
+ }
+
+ // The maximum size of a trace.
+ // Setting this to 1G because that ought to be enough.
+ private const val BUFFER_SIZE_BYTES = 1024 * 1024 * 1024 // bytes
+
+ // The sampling internal. Set to 1/10th of a millisecond.
+ private const val INTERVAL_MICRO_SECONDS = 1000 // micro-seconds
+ }
+}
+
+@RequiresApi(21)
+internal object MethodTracingApi21 {
+ @DoNotInline
+ fun startMethodTracingSampling(
+ tracePath: String,
+ bufferSize: Int,
+ intervalUs: Int
+ ) {
+ Debug.startMethodTracingSampling(tracePath, bufferSize, intervalUs)
+ }
+
+ @DoNotInline
+ @Suppress("DEPRECATION")
+ fun Context.getFirstMountedMediaDir(): File? {
+ // This is identical to the snippet from Outputs.dirUsableByAppAndShell.
+ // This is the only way to write a trace that can be subsequently copied cleanly
+ // by the Shell.
+ return externalMediaDirs.firstOrNull {
+ Environment.getExternalStorageState(it) == Environment.MEDIA_MOUNTED
+ }
+ }
+}
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
index f1321d2..2582f2a 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
@@ -43,7 +43,6 @@
import androidx.test.platform.app.InstrumentationRegistry
import androidx.tracing.trace
import java.io.File
-import java.lang.StringBuilder
/**
* Get package ApplicationInfo, throw if not found
@@ -202,7 +201,8 @@
it.configure(packageName)
}
val measurements = PerfettoTraceProcessor.runServer {
- List(if (Arguments.dryRunMode) 1 else iterations) { iteration ->
+ val runIterations = if (Arguments.dryRunMode) 1 else iterations
+ List(runIterations) { iteration ->
// Wake the device to ensure it stays awake with large iteration count
userspaceTrace("wake device") {
scope.device.wakeUp()
@@ -214,8 +214,9 @@
}
val iterString = iteration.toString().padStart(3, '0')
+ val fileLabel = "${uniqueName}_iter$iterString"
val tracePath = perfettoCollector.record(
- fileLabel = "${uniqueName}_iter$iterString",
+ fileLabel = fileLabel,
config = PerfettoConfig.Benchmark(
/**
* Prior to API 24, every package name was joined into a single setprop
@@ -238,6 +239,19 @@
) {
try {
trace("start metrics") {
+ if (Arguments.methodTracingOptions.isNotEmpty()) {
+ // Once you turn on method tracing its okay to ignore
+ // the costs of true CompilationMode.COLD as the numbers cannot
+ // be used for anything reasonable.
+
+ // It would be nice if our metrics infra supported this use case
+ // better.
+ MethodTracing.startTracing(
+ packageName = packageName,
+ options = Arguments.methodTracingOptions,
+ uniqueName = fileLabel
+ )
+ }
metrics.forEach {
it.start()
}
@@ -250,6 +264,12 @@
metrics.forEach {
it.stop()
}
+ if (Arguments.methodTracingOptions.isNotEmpty()) {
+ MethodTracing.stopTracing(
+ packageName = packageName,
+ uniqueName = fileLabel
+ )
+ }
}
}
}!!
@@ -289,7 +309,6 @@
appendUiState(uiState)
}
Log.d(TAG, "Iteration $iteration captured $uiState")
-
// report just the metrics
measurementList
}.mergeMultiIterResults()
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MethodTracing.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MethodTracing.kt
new file mode 100644
index 0000000..7a07561
--- /dev/null
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MethodTracing.kt
@@ -0,0 +1,89 @@
+package androidx.benchmark.macro
+
+import android.content.Context
+import androidx.annotation.RestrictTo
+import androidx.benchmark.Outputs
+import androidx.benchmark.Shell
+import androidx.benchmark.getFirstMountedMediaDir
+import androidx.benchmark.userspaceTrace
+import androidx.test.platform.app.InstrumentationRegistry
+import java.io.File
+
+private const val OPTION_SAMPLED = "Sampled"
+private const val RECEIVER_NAME = "androidx.benchmark.internal.MethodTracingReceiver"
+
+// Extras
+private const val ACTION = "ACTION"
+private const val UNIQUE_NAME = "UNIQUE_NAME"
+
+// Actions
+private const val METHOD_TRACE_START = "METHOD_TRACE_START"
+private const val METHOD_TRACE_START_SAMPLED = "METHOD_TRACE_START_SAMPLED"
+private const val METHOD_TRACE_END = "ACTION_METHOD_TRACE_END"
+
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+object MethodTracing {
+ private val context: Context = InstrumentationRegistry.getInstrumentation().context
+
+ /**
+ * Starts method tracing on the [packageName].
+ * <br/>
+ * The only [options] supported are `Full` and `Sampled`.
+ */
+ fun startTracing(packageName: String, uniqueName: String, options: String) {
+ val fileName = fileName(uniqueName)
+ // The only options possible are `Full` and `Sampled`
+ val extras = if (options == (OPTION_SAMPLED)) {
+ "-e $ACTION $METHOD_TRACE_START_SAMPLED -e $UNIQUE_NAME $fileName"
+ } else {
+ "-e $ACTION $METHOD_TRACE_START -e $UNIQUE_NAME $fileName"
+ }
+ broadcast(packageName, extras)
+ }
+
+ /**
+ * Stops method tracing and copies the output trace to the `additionalTestOutputDir`.
+ */
+ fun stopTracing(packageName: String, uniqueName: String) {
+ val fileName = fileName(uniqueName)
+ val extras = "-e $ACTION $METHOD_TRACE_END"
+ broadcast(packageName, extras)
+ // The reason we are doing this is to make trace collection possible.
+ // The target APK stores the method traces in the first media mounted directory.
+ // This is because, that happens to be the only directory accessible to the app and shell.
+ // We then subsequently copy it to the actual `Outputs.dirUsableByAppAndShell` from the
+ // perspective of the test APK.
+ val mediaDirParent = context.getFirstMountedMediaDir()?.parentFile
+ val sourcePath = "$mediaDirParent/$packageName/$fileName"
+ // Staging location before we write it again using Outputs.writeFile(...)
+ // :(
+ val stagingPath = "${Outputs.dirUsableByAppAndShell}/_$fileName"
+ Shell.executeScriptSilent("cp '$sourcePath' '$stagingPath'")
+ // Report
+ Outputs.writeFile(fileName, fileName) {
+ val staging = File(stagingPath)
+ // No need to clean up, here because the clean up happens automatically on subsequent
+ // test runs.
+ staging.copyTo(it, overwrite = true)
+ }
+ }
+
+ private fun fileName(uniqueName: String): String {
+ return "${uniqueName}_method.trace"
+ }
+
+ private fun broadcast(targetPackageName: String, extras: String) {
+ userspaceTrace("methodTracingBroadcast") {
+ val action = "androidx.benchmark.experiments.ACTION_METHOD_TRACE"
+ val result =
+ Shell.amBroadcast("-a $action $extras $targetPackageName/$RECEIVER_NAME") ?: 0
+ require(result > 0) {
+ """
+ Operation with $extras failed (result code $result).
+ Make sure you add a dependency on:
+ `project(":benchmark:benchmark-internal")`
+ """.trimIndent()
+ }
+ }
+ }
+}
diff --git a/benchmark/integration-tests/macrobenchmark-target/build.gradle b/benchmark/integration-tests/macrobenchmark-target/build.gradle
index d455803..10a09b7 100644
--- a/benchmark/integration-tests/macrobenchmark-target/build.gradle
+++ b/benchmark/integration-tests/macrobenchmark-target/build.gradle
@@ -35,6 +35,7 @@
implementation(libs.kotlinStdlib)
implementation(libs.constraintLayout)
implementation(project(":appcompat:appcompat"))
+ implementation(project(":benchmark:benchmark-internal"))
implementation(project(":activity:activity"))
implementation(project(":profileinstaller:profileinstaller"))
implementation(project(":recyclerview:recyclerview"))
diff --git a/browser/browser/api/current.txt b/browser/browser/api/current.txt
index 5b284c8..72e8fbb 100644
--- a/browser/browser/api/current.txt
+++ b/browser/browser/api/current.txt
@@ -203,6 +203,7 @@
method @androidx.browser.customtabs.CustomTabsService.Result protected abstract int postMessage(androidx.browser.customtabs.CustomTabsSessionToken, String, android.os.Bundle?);
method protected abstract boolean receiveFile(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, int, android.os.Bundle?);
method protected abstract boolean requestPostMessageChannel(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri);
+ method protected boolean requestPostMessageChannel(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, android.net.Uri?, android.os.Bundle);
method protected boolean setEngagementSignalsCallback(androidx.browser.customtabs.CustomTabsSessionToken, androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle);
method protected abstract boolean updateVisuals(androidx.browser.customtabs.CustomTabsSessionToken, android.os.Bundle?);
method protected abstract boolean validateRelationship(androidx.browser.customtabs.CustomTabsSessionToken, @androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
@@ -244,6 +245,7 @@
method @androidx.browser.customtabs.CustomTabsService.Result public int postMessage(String, android.os.Bundle?);
method public boolean receiveFile(android.net.Uri, int, android.os.Bundle?);
method public boolean requestPostMessageChannel(android.net.Uri);
+ method public boolean requestPostMessageChannel(android.net.Uri, android.net.Uri?, android.os.Bundle);
method public boolean setActionButton(android.graphics.Bitmap, String);
method @RequiresFeature(name=androidx.browser.customtabs.CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement="androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable") public boolean setEngagementSignalsCallback(androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle) throws android.os.RemoteException;
method @RequiresFeature(name=androidx.browser.customtabs.CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement="androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable") public boolean setEngagementSignalsCallback(java.util.concurrent.Executor, androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle) throws android.os.RemoteException;
diff --git a/browser/browser/api/restricted_current.txt b/browser/browser/api/restricted_current.txt
index 3862b78..7f1fc11 100644
--- a/browser/browser/api/restricted_current.txt
+++ b/browser/browser/api/restricted_current.txt
@@ -214,6 +214,7 @@
method @androidx.browser.customtabs.CustomTabsService.Result protected abstract int postMessage(androidx.browser.customtabs.CustomTabsSessionToken, String, android.os.Bundle?);
method protected abstract boolean receiveFile(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, int, android.os.Bundle?);
method protected abstract boolean requestPostMessageChannel(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri);
+ method protected boolean requestPostMessageChannel(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, android.net.Uri?, android.os.Bundle);
method protected boolean setEngagementSignalsCallback(androidx.browser.customtabs.CustomTabsSessionToken, androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle);
method protected abstract boolean updateVisuals(androidx.browser.customtabs.CustomTabsSessionToken, android.os.Bundle?);
method protected abstract boolean validateRelationship(androidx.browser.customtabs.CustomTabsSessionToken, @androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
@@ -255,6 +256,7 @@
method @androidx.browser.customtabs.CustomTabsService.Result public int postMessage(String, android.os.Bundle?);
method public boolean receiveFile(android.net.Uri, int, android.os.Bundle?);
method public boolean requestPostMessageChannel(android.net.Uri);
+ method public boolean requestPostMessageChannel(android.net.Uri, android.net.Uri?, android.os.Bundle);
method public boolean setActionButton(android.graphics.Bitmap, String);
method @RequiresFeature(name=androidx.browser.customtabs.CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement="androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable") public boolean setEngagementSignalsCallback(androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle) throws android.os.RemoteException;
method @RequiresFeature(name=androidx.browser.customtabs.CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement="androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable") public boolean setEngagementSignalsCallback(java.util.concurrent.Executor, androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle) throws android.os.RemoteException;
diff --git a/browser/browser/src/androidTest/java/androidx/browser/customtabs/PostMessageTest.java b/browser/browser/src/androidTest/java/androidx/browser/customtabs/PostMessageTest.java
index ab0d51b..c719cfe 100644
--- a/browser/browser/src/androidTest/java/androidx/browser/customtabs/PostMessageTest.java
+++ b/browser/browser/src/androidTest/java/androidx/browser/customtabs/PostMessageTest.java
@@ -17,6 +17,7 @@
package androidx.browser.customtabs;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -143,4 +144,23 @@
PollingCheck.waitFor(() -> mPostMessageServiceConnected);
assertTrue(mPostMessageServiceConnected);
}
+
+ @Test
+ public void testWithDisallowedTargetOrigin() {
+ PollingCheck.waitFor(() -> mCustomTabsServiceConnected);
+ assertTrue(mCustomTabsServiceConnected);
+ assertFalse(mSession.requestPostMessageChannel(Uri.EMPTY, Uri.parse("www.notallowed.com"),
+ new Bundle()));
+ assertEquals(CustomTabsService.RESULT_FAILURE_DISALLOWED, mSession.postMessage("", null));
+ }
+
+ @Test
+ public void testWithAllowedTargetOrigin() {
+ PollingCheck.waitFor(() -> mCustomTabsServiceConnected);
+ assertTrue(mCustomTabsServiceConnected);
+ assertTrue(mSession.requestPostMessageChannel(Uri.EMPTY,
+ Uri.parse(TestCustomTabsService.ALLOWED_TARGET_ORIGIN),
+ new Bundle()));
+ assertEquals(CustomTabsService.RESULT_SUCCESS, mSession.postMessage("", null));
+ }
}
diff --git a/browser/browser/src/androidTest/java/androidx/browser/customtabs/TestCustomTabsService.java b/browser/browser/src/androidTest/java/androidx/browser/customtabs/TestCustomTabsService.java
index 62bef7e..d772335 100644
--- a/browser/browser/src/androidTest/java/androidx/browser/customtabs/TestCustomTabsService.java
+++ b/browser/browser/src/androidTest/java/androidx/browser/customtabs/TestCustomTabsService.java
@@ -44,10 +44,10 @@
public class TestCustomTabsService extends CustomTabsService {
public static final String CALLBACK_BIND_TO_POST_MESSAGE = "BindToPostMessageService";
+ public static final String ALLOWED_TARGET_ORIGIN = "www.example.com";
private static TestCustomTabsService sInstance;
private final CountDownLatch mFileReceivingLatch = new CountDownLatch(1);
-
private boolean mPostMessageRequested;
private CustomTabsSessionToken mSession;
private ICustomTabsService mMock;
@@ -106,7 +106,6 @@
Uri postMessageOrigin, Bundle extras) throws RemoteException {
return false;
}
-
@Override
public int postMessage(ICustomTabsCallback callback, String message, Bundle extras)
throws RemoteException {
@@ -182,7 +181,16 @@
@Override
protected boolean requestPostMessageChannel(
@NonNull CustomTabsSessionToken sessionToken, @NonNull Uri postMessageOrigin) {
+ return requestPostMessageChannel(sessionToken, postMessageOrigin, null, new Bundle());
+ }
+
+ @Override
+ protected boolean requestPostMessageChannel(@NonNull CustomTabsSessionToken sessionToken,
+ @NonNull Uri postMessageOrigin, @Nullable Uri postMessageTargetOrigin,
+ @NonNull Bundle extras) {
if (mSession == null) return false;
+ if (postMessageTargetOrigin != null
+ && !postMessageTargetOrigin.toString().equals(ALLOWED_TARGET_ORIGIN)) return false;
mPostMessageRequested = true;
mSession.getCallback().extraCallback(CALLBACK_BIND_TO_POST_MESSAGE, null);
return true;
diff --git a/browser/browser/src/main/java/androidx/browser/customtabs/Api33Impl.java b/browser/browser/src/main/java/androidx/browser/customtabs/Api33Impl.java
new file mode 100644
index 0000000..ca13623
--- /dev/null
+++ b/browser/browser/src/main/java/androidx/browser/customtabs/Api33Impl.java
@@ -0,0 +1,39 @@
+/*
+ * 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.browser.customtabs;
+
+import static android.os.Build.VERSION_CODES.TIRAMISU;
+
+import android.os.Bundle;
+
+import androidx.annotation.DoNotInline;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+
+@RequiresApi(TIRAMISU)
+class Api33Impl {
+ private Api33Impl() {
+ // This class is non-instantiable.
+ }
+
+ @DoNotInline
+ static <T> T getParcelable(@NonNull Bundle in, @Nullable String key,
+ @NonNull Class<T> clazz) {
+ return in.getParcelable(key, clazz);
+ }
+}
diff --git a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsService.java b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsService.java
index ee1e791..96e7f01 100644
--- a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsService.java
+++ b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsService.java
@@ -20,6 +20,7 @@
import android.app.Service;
import android.content.Intent;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.os.IBinder.DeathRecipient;
@@ -226,7 +227,8 @@
public boolean requestPostMessageChannel(@NonNull ICustomTabsCallback callback,
@NonNull Uri postMessageOrigin) {
return CustomTabsService.this.requestPostMessageChannel(
- new CustomTabsSessionToken(callback, null), postMessageOrigin);
+ new CustomTabsSessionToken(callback, null), postMessageOrigin,
+ null, new Bundle());
}
@Override
@@ -234,7 +236,7 @@
@NonNull Uri postMessageOrigin, @NonNull Bundle extras) {
return CustomTabsService.this.requestPostMessageChannel(
new CustomTabsSessionToken(callback, getSessionIdFromBundle(extras)),
- postMessageOrigin);
+ postMessageOrigin, getTargetOriginFromBundle(extras), extras);
}
@Override
@@ -296,6 +298,17 @@
bundle.remove(CustomTabsIntent.EXTRA_SESSION_ID);
return sessionId;
}
+
+ @SuppressWarnings("deprecation")
+ private @Nullable Uri getTargetOriginFromBundle(@Nullable Bundle bundle) {
+ if (bundle == null) return null;
+ if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ return Api33Impl.getParcelable(bundle, CustomTabsSession.TARGET_ORIGIN_KEY,
+ Uri.class);
+ } else {
+ return bundle.getParcelable(CustomTabsSession.TARGET_ORIGIN_KEY);
+ }
+ }
};
@Override
@@ -434,6 +447,25 @@
@NonNull CustomTabsSessionToken sessionToken, @NonNull Uri postMessageOrigin);
/**
+ * Same as above method with specifying the target origin to establish communication with.
+ *
+ * @param sessionToken The unique identifier for the session. Can not be null.
+ * @param postMessageOrigin A origin that the client is requesting to be identified as
+ * during the postMessage communication.
+ * @param postMessageTargetOrigin The target Origin to establish PostMessageChannel with and
+ * send messages to.
+ * @param extras Reserved for future use.
+ * @return Whether the implementation accepted the request. Note that returning true
+ * here doesn't mean an origin has already been assigned as the validation is
+ * asynchronous.
+ */
+ protected boolean requestPostMessageChannel(
+ @NonNull CustomTabsSessionToken sessionToken, @NonNull Uri postMessageOrigin,
+ @Nullable Uri postMessageTargetOrigin, @NonNull Bundle extras) {
+ return requestPostMessageChannel(sessionToken, postMessageOrigin);
+ }
+
+ /**
* Sends a postMessage request using the origin communicated via
* {@link CustomTabsService#requestPostMessageChannel(
*CustomTabsSessionToken, Uri)}. Fails when called before
diff --git a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsSession.java b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsSession.java
index 0a59a38..abd1623 100644
--- a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsSession.java
+++ b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsSession.java
@@ -50,6 +50,7 @@
*/
public final class CustomTabsSession {
private static final String TAG = "CustomTabsSession";
+ static final String TARGET_ORIGIN_KEY = "target_origin";
private final Object mLock = new Object();
private final ICustomTabsService mService;
private final ICustomTabsCallback mCallback;
@@ -63,7 +64,8 @@
*
* {@see Intent#filterEquals()}
*/
- @Nullable private final PendingIntent mId;
+ @Nullable
+ private final PendingIntent mId;
/**
* Provides browsers a way to generate a mock {@link CustomTabsSession} for testing
@@ -104,7 +106,7 @@
* likelihood order. Inside each Bundle, the client should provide a
* {@link Uri} using {@link CustomTabsService#KEY_URL} with
* {@link Bundle#putParcelable(String, android.os.Parcelable)}.
- * @return true for success.
+ * @return true for success.
*/
@SuppressWarnings("NullAway") // TODO: b/142938599
public boolean mayLaunchUrl(@Nullable Uri url, @Nullable Bundle extras,
@@ -121,9 +123,8 @@
* This sets the action button on the toolbar with ID
* {@link CustomTabsIntent#TOOLBAR_ACTION_BUTTON_ID}.
*
- * @param icon The new icon of the action button.
- * @param description Content description of the action button.
- *
+ * @param icon The new icon of the action button.
+ * @param description Content description of the action button.
* @see CustomTabsSession#setToolbarItem(int, Bitmap, String)
*/
public boolean setActionButton(@NonNull Bitmap icon, @NonNull String description) {
@@ -143,6 +144,7 @@
/**
* Updates the {@link RemoteViews} of the secondary toolbar in an existing custom tab session.
+ *
* @param remoteViews The updated {@link RemoteViews} that will be shown in secondary toolbar.
* If null, the current secondary toolbar will be dismissed.
* @param clickableIDs The ids of clickable views. The onClick event of these views will be
@@ -167,10 +169,11 @@
/**
* Updates the visuals for toolbar items. Will only succeed if a custom tab created using this
* session is in the foreground in browser and the given id is valid.
- * @param id The id for the item to update.
- * @param icon The new icon of the toolbar item.
- * @param description Content description of the toolbar item.
- * @return Whether the update succeeded.
+ *
+ * @param id The id for the item to update.
+ * @param icon The new icon of the toolbar item.
+ * @param description Content description of the toolbar item.
+ * @return Whether the update succeeded.
* @deprecated Use
* CustomTabsSession#setSecondaryToolbarViews(RemoteViews, int[], PendingIntent)
*/
@@ -194,26 +197,41 @@
/**
* Sends a request to create a two way postMessage channel between the client and the browser.
*
- * @param postMessageOrigin A origin that the client is requesting to be identified as
- * during the postMessage communication.
+ * @param postMessageOrigin A origin that the client is requesting to be identified as
+ * during the postMessage communication.
* @return Whether the implementation accepted the request. Note that returning true
- * here doesn't mean an origin has already been assigned as the validation is
- * asynchronous.
+ * here doesn't mean an origin has already been assigned as the validation is
+ * asynchronous.
*/
public boolean requestPostMessageChannel(@NonNull Uri postMessageOrigin) {
+ return requestPostMessageChannel(postMessageOrigin, null, new Bundle());
+ }
+
+ /**
+ * Sends a request to create a two way postMessage channel between the client and the browser
+ * with specifying the target origin to communicate with.
+ *
+ * @param postMessageOrigin A origin that the client is requesting to be identified as
+ * during the postMessage communication.
+ * @param postMessageTargetOrigin The target Origin to establish the postMessage communication
+ * with.
+ * @param extras Reserved for future use.
+ * @return Whether the implementation accepted the request. Note that returning true
+ * here doesn't mean an origin has already been assigned as the validation is
+ * asynchronous.
+ */
+ public boolean requestPostMessageChannel(@NonNull Uri postMessageOrigin,
+ @Nullable Uri postMessageTargetOrigin, @NonNull Bundle extras) {
try {
- // If mId is not null we know that the CustomTabsService supports
- // requestPostMessageChannelWithExtras. That is because non-null mId means that
- // CustomTabsSession was created with CustomTabsClient#newSession(Callback int), which
- // can succeed only when browsers supporting CustomTabsService#newSessionWithExtras.
- // This was added at the same time as requestPostMessageChannelWithExtras.
- if (mId != null) {
+ Bundle targetOriginWithIdBundle =
+ createPostMessageExtraBundle(postMessageTargetOrigin);
+ if (targetOriginWithIdBundle != null) {
+ extras.putAll(targetOriginWithIdBundle);
return mService.requestPostMessageChannelWithExtras(
- mCallback, postMessageOrigin, createBundleWithId(null));
+ mCallback, postMessageOrigin, extras);
} else {
return mService.requestPostMessageChannel(mCallback, postMessageOrigin);
}
-
} catch (RemoteException e) {
return false;
}
@@ -222,14 +240,14 @@
/**
* Sends a postMessage request using the origin communicated via
* {@link CustomTabsService#requestPostMessageChannel(
- * CustomTabsSessionToken, Uri)}. Fails when called before
+ *CustomTabsSessionToken, Uri)}. Fails when called before
* {@link PostMessageServiceConnection#notifyMessageChannelReady(Bundle)} is received on
* the client side.
*
* @param message The message that is being sent.
- * @param extras Reserved for future use.
+ * @param extras Reserved for future use.
* @return An integer constant about the postMessage request result. Will return
- * {@link CustomTabsService#RESULT_SUCCESS} if successful.
+ * {@link CustomTabsService#RESULT_SUCCESS} if successful.
*/
@Result
public int postMessage(@NonNull String message, @Nullable Bundle extras) {
@@ -259,8 +277,8 @@
*
* @param relation Relation to check, must be one of the {@code CustomTabsService#RELATION_* }
* constants.
- * @param origin Origin.
- * @param extras Reserved for future use.
+ * @param origin Origin.
+ * @param extras Reserved for future use.
* @return {@code true} if the request has been submitted successfully.
*/
public boolean validateRelationship(@Relation int relation, @NonNull Uri origin,
@@ -287,10 +305,10 @@
* The file is read and processed (where applicable) synchronously, therefore it's recommended
* to call this method on a background thread.
*
- * @param uri {@link Uri} of the file.
+ * @param uri {@link Uri} of the file.
* @param purpose Purpose of transferring this file, one of the constants enumerated in
* {@code CustomTabsService#FilePurpose}.
- * @param extras Reserved for future use.
+ * @param extras Reserved for future use.
* @return {@code true} if the file was received successfully.
*/
public boolean receiveFile(@NonNull Uri uri, @CustomTabsService.FilePurpose int purpose,
@@ -311,12 +329,12 @@
*
* @param extras Reserved for future use.
* @return Whether the Engagement Signals API is available. A false value means
- * {@link #getGreatestScrollPercentage} will throw an
- * {@link UnsupportedOperationException} if called, and
- * {@link #setEngagementSignalsCallback} will return false and not set the callback.
- * @throws RemoteException If the Service dies while responding to the request.
+ * {@link #getGreatestScrollPercentage} will throw an
+ * {@link UnsupportedOperationException} if called, and
+ * {@link #setEngagementSignalsCallback} will return false and not set the callback.
+ * @throws RemoteException If the Service dies while responding to the request.
* @throws UnsupportedOperationException If this method isn't supported by the Custom Tabs
- * implementation.
+ * implementation.
*/
public boolean isEngagementSignalsApiAvailable(@NonNull Bundle extras) throws RemoteException {
try {
@@ -336,12 +354,12 @@
* {@link #setEngagementSignalsCallback(Executor, EngagementSignalsCallback, Bundle)}.
*
* @param callback The {@link EngagementSignalsCallback} to receive the user engagement signals.
- * @param extras Reserved for future use.
+ * @param extras Reserved for future use.
* @return Whether the callback connection is allowed. If false, no callbacks will be called for
- * this session.
- * @throws RemoteException If the Service dies while responding to the request.
+ * this session.
+ * @throws RemoteException If the Service dies while responding to the request.
* @throws UnsupportedOperationException If this method isn't supported by the Custom Tabs
- * implementation.
+ * implementation.
*/
@RequiresFeature(name = CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement =
"androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable")
@@ -385,12 +403,12 @@
*
* @param executor The {@link Executor} to be used to execute the callbacks.
* @param callback The {@link EngagementSignalsCallback} to receive the user engagement signals.
- * @param extras Reserved for future use.
+ * @param extras Reserved for future use.
* @return Whether the callback connection is allowed. If false, no callbacks will be called for
- * this session.
- * @throws RemoteException If the Service dies while responding to the request.
+ * this session.
+ * @throws RemoteException If the Service dies while responding to the request.
* @throws UnsupportedOperationException If this method isn't supported by the Custom Tabs
- * implementation.
+ * implementation.
*/
@RequiresFeature(name = CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement =
"androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable")
@@ -403,7 +421,7 @@
return mService.setEngagementSignalsCallback(mCallback, wrapper.asBinder(), extras);
} catch (SecurityException e) {
throw new UnsupportedOperationException("This method isn't supported by the "
- + "Custom Tabs implementation.", e);
+ + "Custom Tabs implementation.", e);
}
}
@@ -457,12 +475,13 @@
*
* @param extras Reserved for future use.
* @return An integer in the range of [0, 100] indicating the amount that the user has
- * scrolled the page with 0 indicating the user has never scrolled the page and 100
- * indicating they have scrolled to the very bottom.
- * @throws RemoteException If the Service dies while responding to the request.
+ * scrolled the page with 0 indicating the user has never scrolled the page and 100
+ * indicating they have scrolled to the very bottom.
+ * @throws RemoteException If the Service dies while responding to the request.
* @throws UnsupportedOperationException If the Engagement Signals API isn't available, i.e.
- * {@link #isEngagementSignalsApiAvailable} returns false, or the method isn't supported
- * by the Custom Tabs implementation.
+ * {@link #isEngagementSignalsApiAvailable} returns
+ * false, or the method isn't supported
+ * by the Custom Tabs implementation.
*/
@RequiresFeature(name = CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement =
"androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable")
@@ -476,6 +495,22 @@
}
}
+ private @Nullable Bundle createPostMessageExtraBundle(@Nullable Uri targetOrigin) {
+ Bundle toReturn = new Bundle();
+ if (targetOrigin != null) {
+ toReturn.putParcelable(CustomTabsSession.TARGET_ORIGIN_KEY, targetOrigin);
+ }
+ // If mId is not null we know that the CustomTabsService supports
+ // requestPostMessageChannelWithExtras. That is because non-null mId means that
+ // CustomTabsSession was created with CustomTabsClient#newSession(Callback int), which
+ // can succeed only when browsers supporting CustomTabsService#newSessionWithExtras.
+ // This was added at the same time as requestPostMessageChannelWithExtras.
+ if (mId != null) {
+ addIdToBundle(toReturn);
+ }
+ return toReturn.isEmpty() ? null : toReturn;
+ }
+
private Bundle createBundleWithId(@Nullable Bundle bundle) {
Bundle bundleWithId = new Bundle();
if (bundle != null) bundleWithId.putAll(bundle);
@@ -496,7 +531,7 @@
}
@Nullable
- /* package */ PendingIntent getId() {
+ /* package */ PendingIntent getId() {
return mId;
}
@@ -505,12 +540,13 @@
* {@link CustomTabsService}.
*
* Use {@link CustomTabsClient#attachSession(PendingSession)} to get {@link CustomTabsSession}.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public static class PendingSession {
- @Nullable private final CustomTabsCallback mCallback;
- @Nullable private final PendingIntent mId;
+ @Nullable
+ private final CustomTabsCallback mCallback;
+ @Nullable
+ private final PendingIntent mId;
/* package */ PendingSession(
@Nullable CustomTabsCallback callback, @Nullable PendingIntent sessionId) {
@@ -519,12 +555,12 @@
}
@Nullable
- /* package */ PendingIntent getId() {
+ /* package */ PendingIntent getId() {
return mId;
}
@Nullable
- /* package */ CustomTabsCallback getCallback() {
+ /* package */ CustomTabsCallback getCallback() {
return mCallback;
}
}
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt
index a289f28..a8f3c76 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt
@@ -16,6 +16,7 @@
package androidx.camera.camera2.pipe.integration.impl
+import android.content.Context
import android.media.MediaCodec
import android.os.Build
import androidx.annotation.GuardedBy
@@ -23,6 +24,8 @@
import androidx.camera.camera2.pipe.CameraGraph
import androidx.camera.camera2.pipe.core.Log
import androidx.camera.camera2.pipe.integration.adapter.CameraStateAdapter
+import androidx.camera.camera2.pipe.integration.adapter.EncoderProfilesProviderAdapter
+import androidx.camera.camera2.pipe.integration.adapter.SupportedSurfaceCombination
import androidx.camera.camera2.pipe.integration.compat.quirk.CameraQuirks
import androidx.camera.camera2.pipe.integration.config.CameraConfig
import androidx.camera.camera2.pipe.integration.config.CameraScope
@@ -32,6 +35,7 @@
import androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop
import androidx.camera.core.UseCase
import androidx.camera.core.impl.CameraInternal
+import androidx.camera.core.impl.CameraMode
import androidx.camera.core.impl.DeferrableSurface
import androidx.camera.core.impl.SessionConfig.ValidatingBuilder
import javax.inject.Inject
@@ -78,6 +82,7 @@
private val cameraQuirks: CameraQuirks,
private val cameraGraphFlags: CameraGraph.Flags,
private val cameraInternal: Provider<CameraInternal>,
+ context: Context,
cameraProperties: CameraProperties,
displayInfoManager: DisplayInfoManager,
) {
@@ -99,6 +104,14 @@
).build()
}
+ private val supportedSurfaceCombination by lazy {
+ SupportedSurfaceCombination(
+ context,
+ cameraProperties.metadata,
+ EncoderProfilesProviderAdapter(cameraConfig.cameraId.value)
+ )
+ }
+
@Volatile
private var _activeComponent: UseCaseCameraComponent? = null
val camera: UseCaseCamera?
@@ -311,12 +324,13 @@
@GuardedBy("lock")
private fun shouldAddRepeatingUseCase(runningUseCases: Set<UseCase>): Boolean {
val meteringRepeatingEnabled = attachedUseCases.contains(meteringRepeating)
-
- val coreLibraryUseCases = runningUseCases.filterNot { it is MeteringRepeating }
- val onlyVideoCapture = coreLibraryUseCases.onlyVideoCapture()
- val requireMeteringRepeating = coreLibraryUseCases.requireMeteringRepeating()
-
- return !meteringRepeatingEnabled && (onlyVideoCapture || requireMeteringRepeating)
+ if (!meteringRepeatingEnabled) {
+ val activeSurfaces = runningUseCases.withoutMetering().surfaceCount()
+ return activeSurfaces > 0 && with(attachedUseCases.withoutMetering()) {
+ (onlyVideoCapture() || requireMeteringRepeating()) && supportMeteringCombination()
+ }
+ }
+ return false
}
@GuardedBy("lock")
@@ -330,12 +344,13 @@
@GuardedBy("lock")
private fun shouldRemoveRepeatingUseCase(runningUseCases: Set<UseCase>): Boolean {
val meteringRepeatingEnabled = runningUseCases.contains(meteringRepeating)
-
- val coreLibraryUseCases = runningUseCases.filterNot { it is MeteringRepeating }
- val onlyVideoCapture = coreLibraryUseCases.onlyVideoCapture()
- val requireMeteringRepeating = coreLibraryUseCases.requireMeteringRepeating()
-
- return meteringRepeatingEnabled && !onlyVideoCapture && !requireMeteringRepeating
+ if (meteringRepeatingEnabled) {
+ val activeSurfaces = runningUseCases.withoutMetering().surfaceCount()
+ return activeSurfaces == 0 || with(attachedUseCases.withoutMetering()) {
+ !(onlyVideoCapture() || requireMeteringRepeating()) || !supportMeteringCombination()
+ }
+ }
+ return false
}
@GuardedBy("lock")
@@ -353,6 +368,39 @@
}
}
+ private fun Collection<UseCase>.supportMeteringCombination(): Boolean {
+ val useCases = this.toMutableList().apply { add(meteringRepeating) }
+ if (meteringRepeating.attachedSurfaceResolution == null) {
+ meteringRepeating.setupSession()
+ }
+ return isCombinationSupported(useCases).also {
+ Log.debug { "Combination of $useCases is supported: $it" }
+ }
+ }
+
+ private fun isCombinationSupported(currentUseCases: Collection<UseCase>): Boolean {
+ val surfaceConfigs = currentUseCases.map { useCase ->
+ // TODO: Test with correct Camera Mode when concurrent mode / ultra high resolution is
+ // implemented.
+ supportedSurfaceCombination.transformSurfaceConfig(
+ CameraMode.DEFAULT,
+ useCase.imageFormat,
+ useCase.attachedSurfaceResolution!!
+ )
+ }
+
+ return supportedSurfaceCombination.checkSupported(CameraMode.DEFAULT, surfaceConfigs)
+ }
+
+ private fun Collection<UseCase>.surfaceCount(): Int =
+ ValidatingBuilder().let { validatingBuilder ->
+ forEach { useCase -> validatingBuilder.add(useCase.sessionConfig) }
+ return validatingBuilder.build().surfaces.size
+ }
+
+ private fun Collection<UseCase>.withoutMetering(): Collection<UseCase> =
+ filterNot { it is MeteringRepeating }
+
private fun Collection<UseCase>.requireMeteringRepeating(): Boolean {
return isNotEmpty() && checkSurfaces { repeatingSurfaces, sessionSurfaces ->
// There is no repeating UseCases
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManagerTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManagerTest.kt
index d4488e2..b155784 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManagerTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManagerTest.kt
@@ -16,6 +16,7 @@
package androidx.camera.camera2.pipe.integration.impl
+import android.hardware.camera2.CameraCharacteristics
import android.os.Build
import android.util.Size
import androidx.camera.camera2.pipe.CameraGraph
@@ -52,10 +53,15 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.annotation.Config
+import org.robolectric.shadows.StreamConfigurationMapBuilder
@RunWith(RobolectricCameraPipeTestRunner::class)
@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
class UseCaseManagerTest {
+ private val supportedSizes = arrayOf(Size(640, 480))
+ private val streamConfigurationMap = StreamConfigurationMapBuilder.newBuilder().apply {
+ supportedSizes.forEach(::addOutputSize)
+ }.build()
private val useCaseManagerList = mutableListOf<UseCaseManager>()
private val useCaseList = mutableListOf<UseCase>()
private val useCaseThreads by lazy {
@@ -173,7 +179,7 @@
useCaseManager.activate(imageCapture)
// Act
- useCaseManager.deactivate(preview)
+ useCaseManager.detach(listOf(preview))
// Assert
val enabledUseCaseClasses = useCaseManager.camera?.runningUseCases?.map {
@@ -201,7 +207,7 @@
useCaseCameraBuilder.buildInvocationCount = 0
// Act
- useCaseManager.deactivate(preview)
+ useCaseManager.detach(listOf(preview))
// Assert
assertThat(useCaseCameraBuilder.buildInvocationCount).isEqualTo(1)
@@ -248,7 +254,9 @@
// Arrange
val useCaseManager = createUseCaseManager()
val imageCapture = createImageCapture()
- val useCase = FakeUseCase()
+ val useCase = FakeUseCase().also {
+ it.simulateActivation()
+ }
// Act
useCaseManager.activate(imageCapture)
@@ -313,12 +321,23 @@
useCaseCameraComponentBuilder: FakeUseCaseCameraComponentBuilder =
FakeUseCaseCameraComponentBuilder(),
): UseCaseManager {
+ val cameraId = CameraId("0")
+ val characteristicsMap: Map<CameraCharacteristics.Key<*>, Any?> = mapOf(
+ CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP to streamConfigurationMap,
+ )
+ val fakeCameraMetadata = FakeCameraMetadata(
+ cameraId = cameraId,
+ characteristics = characteristicsMap
+ )
val fakeCamera = FakeCamera()
return UseCaseManager(
- cameraConfig = CameraConfig(CameraId("0")),
+ cameraConfig = CameraConfig(cameraId),
builder = useCaseCameraComponentBuilder,
controls = controls as java.util.Set<UseCaseCameraControl>,
- cameraProperties = FakeCameraProperties(),
+ cameraProperties = FakeCameraProperties(
+ metadata = fakeCameraMetadata,
+ cameraId = cameraId,
+ ),
camera2CameraControl = Camera2CameraControl.create(
FakeCamera2CameraControlCompat(),
useCaseThreads,
@@ -328,10 +347,11 @@
cameraGraphFlags = CameraGraph.Flags(),
cameraInternal = { fakeCamera },
cameraQuirks = CameraQuirks(
- FakeCameraMetadata(),
- StreamConfigurationMapCompat(null, OutputSizesCorrector(FakeCameraMetadata(), null))
+ fakeCameraMetadata,
+ StreamConfigurationMapCompat(null, OutputSizesCorrector(fakeCameraMetadata, null))
),
displayInfoManager = DisplayInfoManager(ApplicationProvider.getApplicationContext()),
+ context = ApplicationProvider.getApplicationContext(),
).also {
useCaseManagerList.add(it)
}
@@ -362,6 +382,6 @@
private fun UseCase.simulateActivation() {
bindToCamera(FakeCamera("0"), null, null)
- updateSuggestedStreamSpec(StreamSpec.builder(Size(640, 480)).build())
+ updateSuggestedStreamSpec(StreamSpec.builder(supportedSizes[0]).build())
}
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/SurfaceConfig.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/SurfaceConfig.java
index 1f98de1..11efbac 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/SurfaceConfig.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/SurfaceConfig.java
@@ -40,6 +40,7 @@
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
@AutoValue
public abstract class SurfaceConfig {
+ public static final long DEFAULT_STREAM_USE_CASE_VALUE = 0;
/** Prevent subclassing */
SurfaceConfig() {
}
@@ -49,7 +50,16 @@
*/
@NonNull
public static SurfaceConfig create(@NonNull ConfigType type, @NonNull ConfigSize size) {
- return new AutoValue_SurfaceConfig(type, size);
+ return new AutoValue_SurfaceConfig(type, size, DEFAULT_STREAM_USE_CASE_VALUE);
+ }
+
+ /**
+ * Creates a new instance of SurfaceConfig with the given parameters.
+ */
+ @NonNull
+ public static SurfaceConfig create(@NonNull ConfigType type, @NonNull ConfigSize size,
+ long streamUseCase) {
+ return new AutoValue_SurfaceConfig(type, size, streamUseCase);
}
/** Returns the configuration type. */
@@ -61,6 +71,21 @@
public abstract ConfigSize getConfigSize();
/**
+ * Returns the stream use case.
+ * <p>Stream use case constants are implementation-specific constants that allow the
+ * implementation to optimize power and quality characteristics of a stream depending on how
+ * it will be used.
+ * <p> Stream use case is an int flag used to specify the purpose of the stream associated
+ * with this surface. Use cases for the camera2 implementation that are available on devices can
+ * be found in
+ * {@link android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES}
+ *
+ * <p>See {@link android.hardware.camera2.params.OutputConfiguration#setStreamUseCase}
+ * to see how Camera2 framework uses this.
+ */
+ public abstract long getStreamUseCase();
+
+ /**
* Check whether the input surface configuration has a smaller size than this object and can be
* supported
*
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigDefaultResolverTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigDefaultResolverTest.kt
index 354f38a..639bc32 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigDefaultResolverTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigDefaultResolverTest.kt
@@ -16,8 +16,12 @@
package androidx.camera.video.internal.config
+import android.media.MediaCodecInfo.CodecProfileLevel
+import android.media.MediaFormat
import android.util.Range
+import androidx.camera.core.DynamicRange
import androidx.camera.core.SurfaceRequest
+import androidx.camera.core.impl.EncoderProfilesProxy
import androidx.camera.core.impl.Timebase
import androidx.camera.testing.EncoderProfilesUtil
import androidx.camera.video.VideoSpec
@@ -34,7 +38,8 @@
class VideoEncoderConfigDefaultResolverTest {
companion object {
- const val MIME_TYPE = "video/avc"
+ const val DEFAULT_MIME_TYPE = MediaFormat.MIMETYPE_VIDEO_AVC
+ const val UNSUPPORTED_MIME_TYPE = MediaFormat.MIMETYPE_VIDEO_SCRAMBLED
val TIMEBASE = Timebase.UPTIME
const val FRAME_RATE_30 = 30
const val FRAME_RATE_45 = 45
@@ -53,43 +58,46 @@
val configSupplierCif =
VideoEncoderConfigDefaultResolver(
- MIME_TYPE,
+ DEFAULT_MIME_TYPE,
TIMEBASE,
DEFAULT_VIDEO_SPEC,
surfaceSizeCif,
+ DynamicRange.SDR,
expectedFrameRateRange
)
val configSupplier720p =
VideoEncoderConfigDefaultResolver(
- MIME_TYPE,
+ DEFAULT_MIME_TYPE,
TIMEBASE,
DEFAULT_VIDEO_SPEC,
surfaceSize720p,
+ DynamicRange.SDR,
expectedFrameRateRange
)
val configSupplier1080p =
VideoEncoderConfigDefaultResolver(
- MIME_TYPE,
+ DEFAULT_MIME_TYPE,
TIMEBASE,
DEFAULT_VIDEO_SPEC,
surfaceSize1080p,
+ DynamicRange.SDR,
expectedFrameRateRange
)
val configCif = configSupplierCif.get()
- assertThat(configCif.mimeType).isEqualTo(MIME_TYPE)
+ assertThat(configCif.mimeType).isEqualTo(DEFAULT_MIME_TYPE)
assertThat(configCif.bitrate).isGreaterThan(0)
assertThat(configCif.resolution).isEqualTo(surfaceSizeCif)
assertThat(configCif.frameRate).isEqualTo(FRAME_RATE_30)
val config720p = configSupplier720p.get()
- assertThat(config720p.mimeType).isEqualTo(MIME_TYPE)
+ assertThat(config720p.mimeType).isEqualTo(DEFAULT_MIME_TYPE)
assertThat(config720p.bitrate).isGreaterThan(0)
assertThat(config720p.resolution).isEqualTo(surfaceSize720p)
assertThat(config720p.frameRate).isEqualTo(FRAME_RATE_30)
val config1080p = configSupplier1080p.get()
- assertThat(config1080p.mimeType).isEqualTo(MIME_TYPE)
+ assertThat(config1080p.mimeType).isEqualTo(DEFAULT_MIME_TYPE)
assertThat(config1080p.bitrate).isGreaterThan(0)
assertThat(config1080p.resolution).isEqualTo(surfaceSize1080p)
assertThat(config1080p.frameRate).isEqualTo(FRAME_RATE_30)
@@ -102,10 +110,11 @@
// Get default bit rate for this size
val defaultConfig =
VideoEncoderConfigDefaultResolver(
- MIME_TYPE,
+ DEFAULT_MIME_TYPE,
TIMEBASE,
DEFAULT_VIDEO_SPEC,
surfaceSize720p,
+ DynamicRange.SDR,
SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
).get()
val defaultBitrate = defaultConfig.bitrate
@@ -121,20 +130,22 @@
assertThat(
VideoEncoderConfigDefaultResolver(
- MIME_TYPE,
+ DEFAULT_MIME_TYPE,
TIMEBASE,
higherVideoSpec,
surfaceSize720p,
+ DynamicRange.SDR,
SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
).get().bitrate
).isEqualTo(higherBitrate)
assertThat(
VideoEncoderConfigDefaultResolver(
- MIME_TYPE,
+ DEFAULT_MIME_TYPE,
TIMEBASE,
lowerVideoSpec,
surfaceSize720p,
+ DynamicRange.SDR,
SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
).get().bitrate
).isEqualTo(lowerBitrate)
@@ -146,10 +157,11 @@
assertThat(
VideoEncoderConfigDefaultResolver(
- MIME_TYPE,
+ DEFAULT_MIME_TYPE,
TIMEBASE,
DEFAULT_VIDEO_SPEC,
size,
+ DynamicRange.SDR,
SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
).get().frameRate
).isEqualTo(
@@ -166,14 +178,132 @@
// Expected frame rate range takes precedence over VideoSpec
assertThat(
VideoEncoderConfigDefaultResolver(
- MIME_TYPE,
+ DEFAULT_MIME_TYPE,
TIMEBASE,
DEFAULT_VIDEO_SPEC,
size,
+ DynamicRange.SDR,
expectedFrameRateRange
).get().frameRate
).isEqualTo(
FRAME_RATE_45
)
}
+
+ @Test
+ fun avcMimeType_producesNoProfile_forHdrDynamicRange() {
+ testMimeAndDynamicRangeResolveToProfile(
+ MediaFormat.MIMETYPE_VIDEO_AVC,
+ DynamicRange.HLG_10_BIT, // AVC does not support HLG10
+ EncoderProfilesProxy.CODEC_PROFILE_NONE
+ )
+ }
+
+ @Test
+ fun unsupportedDynamicRange_producesNoProfile() {
+ testMimeAndDynamicRangeResolveToProfile(
+ MediaFormat.MIMETYPE_VIDEO_HEVC,
+ DynamicRange.DOLBY_VISION_10_BIT, // Dolby vision not supported by HEVC
+ EncoderProfilesProxy.CODEC_PROFILE_NONE
+ )
+ }
+
+ @Test
+ fun unsupportedMime_producesNoProfile() {
+ testMimeAndDynamicRangeResolveToProfile(
+ UNSUPPORTED_MIME_TYPE,
+ DynamicRange.HLG_10_BIT,
+ EncoderProfilesProxy.CODEC_PROFILE_NONE
+ )
+ }
+
+ @Test
+ fun codecProfileIsChosenFromMimeAndDynamicRange_hevc() {
+ val dynamicRangeToExpectedProfiles = mapOf(
+ DynamicRange.SDR to CodecProfileLevel.HEVCProfileMain,
+ DynamicRange.HLG_10_BIT to CodecProfileLevel.HEVCProfileMain10,
+ DynamicRange.HDR10_10_BIT to CodecProfileLevel.HEVCProfileMain10HDR10,
+ DynamicRange.HDR10_PLUS_10_BIT to CodecProfileLevel.HEVCProfileMain10HDR10Plus
+ )
+
+ for (entry in dynamicRangeToExpectedProfiles) {
+ testMimeAndDynamicRangeResolveToProfile(
+ MediaFormat.MIMETYPE_VIDEO_HEVC,
+ entry.key,
+ entry.value
+ )
+ }
+ }
+
+ @Test
+ fun codecProfileIsChosenFromMimeAndDynamicRange_av1() {
+ val dynamicRangeToExpectedProfiles = mapOf(
+ DynamicRange.SDR to CodecProfileLevel.AV1ProfileMain8,
+ DynamicRange.HLG_10_BIT to CodecProfileLevel.AV1ProfileMain10,
+ DynamicRange.HDR10_10_BIT to CodecProfileLevel.AV1ProfileMain10HDR10,
+ DynamicRange.HDR10_PLUS_10_BIT to CodecProfileLevel.AV1ProfileMain10HDR10Plus
+ )
+
+ for (entry in dynamicRangeToExpectedProfiles) {
+ testMimeAndDynamicRangeResolveToProfile(
+ MediaFormat.MIMETYPE_VIDEO_HEVC,
+ entry.key,
+ entry.value
+ )
+ }
+ }
+
+ @Test
+ fun codecProfileIsChosenFromMimeAndDynamicRange_vp9() {
+ val dynamicRangeToExpectedProfiles = mapOf(
+ DynamicRange.SDR to CodecProfileLevel.VP9Profile0,
+ DynamicRange.HLG_10_BIT to CodecProfileLevel.VP9Profile2,
+ DynamicRange.HDR10_10_BIT to CodecProfileLevel.VP9Profile2HDR,
+ DynamicRange.HDR10_PLUS_10_BIT to CodecProfileLevel.VP9Profile2HDR10Plus
+ )
+
+ for (entry in dynamicRangeToExpectedProfiles) {
+ testMimeAndDynamicRangeResolveToProfile(
+ MediaFormat.MIMETYPE_VIDEO_VP9,
+ entry.key,
+ entry.value
+ )
+ }
+ }
+
+ @Test
+ fun codecProfileIsChosenFromMimeAndDynamicRange_dolbyVision() {
+ val dynamicRangeToExpectedProfiles = mapOf(
+ DynamicRange.DOLBY_VISION_10_BIT to CodecProfileLevel.DolbyVisionProfileDvheSt,
+ DynamicRange.DOLBY_VISION_8_BIT to CodecProfileLevel.DolbyVisionProfileDvavSe,
+ )
+
+ for (entry in dynamicRangeToExpectedProfiles) {
+ testMimeAndDynamicRangeResolveToProfile(
+ MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION,
+ entry.key,
+ entry.value
+ )
+ }
+ }
+
+ private fun testMimeAndDynamicRangeResolveToProfile(
+ mime: String,
+ dynamicRange: DynamicRange,
+ expectedProfile: Int
+ ) {
+ // Expected frame rate range takes precedence over VideoSpec
+ assertThat(
+ VideoEncoderConfigDefaultResolver(
+ mime,
+ TIMEBASE,
+ DEFAULT_VIDEO_SPEC,
+ EncoderProfilesUtil.RESOLUTION_1080P,
+ dynamicRange,
+ SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
+ ).get().profile
+ ).isEqualTo(
+ expectedProfile
+ )
+ }
}
\ No newline at end of file
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolverTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolverTest.kt
index 8bd09e7..e32b19f 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolverTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolverTest.kt
@@ -75,9 +75,7 @@
private val defaultVideoSpec = VideoSpec.builder().build()
private val timebase = Timebase.UPTIME
- // TODO(b/278168212): Only SDR is checked by now. Need to extend to HDR dynamic ranges.
- private val dynamicRange = DynamicRange.SDR
-
+ private lateinit var dynamicRanges: Set<DynamicRange>
private lateinit var cameraUseCaseAdapter: CameraUseCaseAdapter
private lateinit var videoCapabilities: VideoCapabilities
@@ -92,7 +90,10 @@
val cameraInfo = CameraUtil.createCameraUseCaseAdapter(context, cameraSelector).cameraInfo
videoCapabilities = Recorder.getVideoCapabilities(cameraInfo)
- Assume.assumeTrue(videoCapabilities.getSupportedQualities(dynamicRange).isNotEmpty())
+ dynamicRanges = videoCapabilities.supportedDynamicRanges
+ dynamicRanges.forEach {
+ Assume.assumeTrue(videoCapabilities.getSupportedQualities(it).isNotEmpty())
+ }
}
@After
@@ -108,190 +109,243 @@
@Test
fun defaultVideoSpecProducesValidSettings_forSurfaceSizeEquivalentToQuality() {
- val supportedProfiles = videoCapabilities.getSupportedQualities(dynamicRange).map {
- videoCapabilities.getProfiles(it, dynamicRange)!!
- }
+ dynamicRanges.forEach { dynamicRange ->
+ val supportedProfiles = videoCapabilities.getSupportedQualities(dynamicRange).map {
+ videoCapabilities.getProfiles(it, dynamicRange)!!
+ }
- supportedProfiles.forEach {
- val videoProfile = it.defaultVideoProfile
- val config = VideoEncoderConfigVideoProfileResolver(
- videoProfile.mediaType,
- timebase,
- defaultVideoSpec,
- Size(videoProfile.width, videoProfile.height),
- videoProfile,
- SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
- ).get()
+ supportedProfiles.forEach {
+ val videoProfile = it.defaultVideoProfile
+ val config = VideoEncoderConfigVideoProfileResolver(
+ videoProfile.mediaType,
+ timebase,
+ defaultVideoSpec,
+ Size(videoProfile.width, videoProfile.height),
+ videoProfile,
+ dynamicRange,
+ SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
+ ).get()
- assertThat(config.mimeType).isEqualTo(videoProfile.mediaType)
- assertThat(config.bitrate).isEqualTo(videoProfile.bitrate)
- assertThat(config.resolution).isEqualTo(Size(videoProfile.width, videoProfile.height))
- assertThat(config.frameRate).isEqualTo(videoProfile.frameRate)
+ assertThat(config.mimeType).isEqualTo(videoProfile.mediaType)
+ assertThat(config.bitrate).isEqualTo(videoProfile.bitrate)
+ assertThat(config.resolution).isEqualTo(
+ Size(
+ videoProfile.width,
+ videoProfile.height
+ )
+ )
+ assertThat(config.frameRate).isEqualTo(videoProfile.frameRate)
+ }
}
}
@Test
fun bitrateIncreasesOrDecreasesWithIncreaseOrDecreaseInSurfaceSize() {
- val profile =
- videoCapabilities.getProfiles(Quality.HIGHEST, dynamicRange)!!.defaultVideoProfile
- val surfaceSize = Size(profile.width, profile.height)
+ dynamicRanges.forEach { dynamicRange ->
+ val profile =
+ videoCapabilities.getProfiles(Quality.HIGHEST, dynamicRange)!!.defaultVideoProfile
+ val surfaceSize = Size(profile.width, profile.height)
- val defaultBitrate = VideoEncoderConfigVideoProfileResolver(
- profile.mediaType,
- timebase,
- defaultVideoSpec,
- surfaceSize,
- profile,
- SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
- ).get().bitrate
-
- val increasedSurfaceSize = Size(surfaceSize.width + 100, surfaceSize.height + 100)
- val decreasedSurfaceSize = Size(surfaceSize.width - 100, surfaceSize.height - 100)
-
- assertThat(
- VideoEncoderConfigVideoProfileResolver(
+ val defaultBitrate = VideoEncoderConfigVideoProfileResolver(
profile.mediaType,
timebase,
defaultVideoSpec,
- increasedSurfaceSize,
+ surfaceSize,
profile,
+ dynamicRange,
SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
).get().bitrate
- ).isGreaterThan(defaultBitrate)
- assertThat(
- VideoEncoderConfigVideoProfileResolver(
- profile.mediaType,
- timebase,
- defaultVideoSpec,
- decreasedSurfaceSize,
- profile,
- SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
- ).get().bitrate
- ).isLessThan(defaultBitrate)
+ val increasedSurfaceSize = Size(surfaceSize.width + 100, surfaceSize.height + 100)
+ val decreasedSurfaceSize = Size(surfaceSize.width - 100, surfaceSize.height - 100)
+
+ assertThat(
+ VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
+ timebase,
+ defaultVideoSpec,
+ increasedSurfaceSize,
+ profile,
+ dynamicRange,
+ SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
+ ).get().bitrate
+ ).isGreaterThan(defaultBitrate)
+
+ assertThat(
+ VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
+ timebase,
+ defaultVideoSpec,
+ decreasedSurfaceSize,
+ profile,
+ dynamicRange,
+ SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
+ ).get().bitrate
+ ).isLessThan(defaultBitrate)
+ }
}
@Test
fun bitrateRangeInVideoSpecClampsBitrate() {
- val profile =
- videoCapabilities.getProfiles(Quality.HIGHEST, dynamicRange)!!.defaultVideoProfile
- val surfaceSize = Size(profile.width, profile.height)
+ dynamicRanges.forEach { dynamicRange ->
+ val profile =
+ videoCapabilities.getProfiles(Quality.HIGHEST, dynamicRange)!!.defaultVideoProfile
+ val surfaceSize = Size(profile.width, profile.height)
- val defaultBitrate = VideoEncoderConfigVideoProfileResolver(
- profile.mediaType,
- timebase,
- defaultVideoSpec,
- surfaceSize,
- profile,
- SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
- ).get().bitrate
-
- // Create video spec with limit 20% higher than default.
- val higherBitrate = (defaultBitrate * 1.2).toInt()
- val higherVideoSpec =
- VideoSpec.builder().setBitrate(Range(higherBitrate, Int.MAX_VALUE)).build()
-
- // Create video spec with limit 20% lower than default.
- val lowerBitrate = (defaultBitrate * 0.8).toInt()
- val lowerVideoSpec = VideoSpec.builder().setBitrate(Range(0, lowerBitrate)).build()
-
- assertThat(
- VideoEncoderConfigVideoProfileResolver(
+ val defaultBitrate = VideoEncoderConfigVideoProfileResolver(
profile.mediaType,
timebase,
- higherVideoSpec,
+ defaultVideoSpec,
surfaceSize,
profile,
+ dynamicRange,
SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
).get().bitrate
- ).isEqualTo(higherBitrate)
- assertThat(
- VideoEncoderConfigVideoProfileResolver(
- profile.mediaType,
- timebase,
- lowerVideoSpec,
- surfaceSize,
- profile,
- SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
- ).get().bitrate
- ).isEqualTo(lowerBitrate)
+ // Create video spec with limit 20% higher than default.
+ val higherBitrate = (defaultBitrate * 1.2).toInt()
+ val higherVideoSpec =
+ VideoSpec.builder().setBitrate(Range(higherBitrate, Int.MAX_VALUE)).build()
+
+ // Create video spec with limit 20% lower than default.
+ val lowerBitrate = (defaultBitrate * 0.8).toInt()
+ val lowerVideoSpec = VideoSpec.builder().setBitrate(Range(0, lowerBitrate)).build()
+
+ assertThat(
+ VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
+ timebase,
+ higherVideoSpec,
+ surfaceSize,
+ profile,
+ dynamicRange,
+ SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
+ ).get().bitrate
+ ).isEqualTo(higherBitrate)
+
+ assertThat(
+ VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
+ timebase,
+ lowerVideoSpec,
+ surfaceSize,
+ profile,
+ dynamicRange,
+ SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
+ ).get().bitrate
+ ).isEqualTo(lowerBitrate)
+ }
}
@Test
fun resolvedFrameRateIsClampedToOperatingRate() {
- val profile =
- videoCapabilities.getProfiles(Quality.HIGHEST, dynamicRange)!!.defaultVideoProfile
- val surfaceSize = Size(profile.width, profile.height)
+ dynamicRanges.forEach { dynamicRange ->
+ val profile =
+ videoCapabilities.getProfiles(Quality.HIGHEST, dynamicRange)!!.defaultVideoProfile
+ val surfaceSize = Size(profile.width, profile.height)
- // Construct operating ranges that are both lower and higher than the profile FPS
- val lowerOperatingRange = Range(profile.frameRate / 4, profile.frameRate / 2)
- val higherOperatingRange = Range(profile.frameRate * 2, profile.frameRate * 4)
+ // Construct operating ranges that are both lower and higher than the profile FPS
+ val lowerOperatingRange = Range(profile.frameRate / 4, profile.frameRate / 2)
+ val higherOperatingRange = Range(profile.frameRate * 2, profile.frameRate * 4)
- val clampedDownFrameRate = VideoEncoderConfigVideoProfileResolver(
- profile.mediaType,
- timebase,
- defaultVideoSpec,
- surfaceSize,
- profile,
- lowerOperatingRange
- ).get().frameRate
+ val clampedDownFrameRate = VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
+ timebase,
+ defaultVideoSpec,
+ surfaceSize,
+ profile,
+ dynamicRange,
+ lowerOperatingRange
+ ).get().frameRate
- val clampedUpFrameRate = VideoEncoderConfigVideoProfileResolver(
- profile.mediaType,
- timebase,
- defaultVideoSpec,
- surfaceSize,
- profile,
- higherOperatingRange
- ).get().frameRate
+ val clampedUpFrameRate = VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
+ timebase,
+ defaultVideoSpec,
+ surfaceSize,
+ profile,
+ dynamicRange,
+ higherOperatingRange
+ ).get().frameRate
- assertThat(clampedDownFrameRate).isEqualTo(lowerOperatingRange.upper)
- assertThat(clampedUpFrameRate).isEqualTo(higherOperatingRange.lower)
+ assertThat(clampedDownFrameRate).isEqualTo(lowerOperatingRange.upper)
+ assertThat(clampedUpFrameRate).isEqualTo(higherOperatingRange.lower)
+ }
}
@Test
fun resolvedFrameRateInsideOperatingRangeIsUnchanged() {
- val profile =
- videoCapabilities.getProfiles(Quality.HIGHEST, dynamicRange)!!.defaultVideoProfile
- val surfaceSize = Size(profile.width, profile.height)
+ dynamicRanges.forEach { dynamicRange ->
+ val profile =
+ videoCapabilities.getProfiles(Quality.HIGHEST, dynamicRange)!!.defaultVideoProfile
+ val surfaceSize = Size(profile.width, profile.height)
- // Construct a range that includes the profile FPS
- val operatingRange = Range(profile.frameRate / 2, profile.frameRate * 2)
+ // Construct a range that includes the profile FPS
+ val operatingRange = Range(profile.frameRate / 2, profile.frameRate * 2)
- val resolvedFrameRate = VideoEncoderConfigVideoProfileResolver(
- profile.mediaType,
- timebase,
- defaultVideoSpec,
- surfaceSize,
- profile,
- operatingRange
- ).get().frameRate
+ val resolvedFrameRate = VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
+ timebase,
+ defaultVideoSpec,
+ surfaceSize,
+ profile,
+ dynamicRange,
+ operatingRange
+ ).get().frameRate
- assertThat(resolvedFrameRate).isEqualTo(profile.frameRate)
+ assertThat(resolvedFrameRate).isEqualTo(profile.frameRate)
+ }
}
@Test
fun bitrateScalesWithFrameRateOperatingRange() {
- val profile =
- videoCapabilities.getProfiles(Quality.HIGHEST, dynamicRange)!!.defaultVideoProfile
- val surfaceSize = Size(profile.width, profile.height)
+ dynamicRanges.forEach { dynamicRange ->
+ val profile =
+ videoCapabilities.getProfiles(Quality.HIGHEST, dynamicRange)!!.defaultVideoProfile
+ val surfaceSize = Size(profile.width, profile.height)
- // Construct a range which is constant and half the profile FPS
- val operatingFrameRate = profile.frameRate / 2
- val operatingRange = Range(operatingFrameRate, operatingFrameRate)
+ // Construct a range which is constant and half the profile FPS
+ val operatingFrameRate = profile.frameRate / 2
+ val operatingRange = Range(operatingFrameRate, operatingFrameRate)
- val resolvedBitrate = VideoEncoderConfigVideoProfileResolver(
- profile.mediaType,
- timebase,
- defaultVideoSpec,
- surfaceSize,
- profile,
- operatingRange
- ).get().bitrate
+ val resolvedBitrate = VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
+ timebase,
+ defaultVideoSpec,
+ surfaceSize,
+ profile,
+ dynamicRange,
+ operatingRange
+ ).get().bitrate
- assertThat(resolvedBitrate).isEqualTo(
- (profile.bitrate * (operatingFrameRate.toDouble() / profile.frameRate)).toInt()
- )
+ assertThat(resolvedBitrate).isEqualTo(
+ (profile.bitrate * (operatingFrameRate.toDouble() / profile.frameRate)).toInt()
+ )
+ }
+ }
+
+ @Test
+ fun codecProfileLevel_isResolvedFromVideoProfile() {
+ dynamicRanges.forEach { dynamicRange ->
+ val supportedProfiles = videoCapabilities.getSupportedQualities(dynamicRange).flatMap {
+ videoCapabilities.getProfiles(it, dynamicRange)!!.videoProfiles
+ }
+
+ supportedProfiles.forEach { videoProfile ->
+ val surfaceSize = Size(videoProfile.width, videoProfile.height)
+
+ val resolvedProfile = VideoEncoderConfigVideoProfileResolver(
+ videoProfile.mediaType,
+ timebase,
+ defaultVideoSpec,
+ surfaceSize,
+ videoProfile,
+ dynamicRange,
+ Range(videoProfile.frameRate, videoProfile.frameRate)
+ ).get().profile
+
+ assertThat(resolvedProfile).isEqualTo(videoProfile.profile)
+ }
+ }
}
}
\ No newline at end of file
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/workaround/EncoderFinderTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/workaround/EncoderFinderTest.kt
index d6c35d2..16c14bb 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/workaround/EncoderFinderTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/workaround/EncoderFinderTest.kt
@@ -169,6 +169,7 @@
videoSpec,
resolution,
videoProfile,
+ dynamicRange,
SurfaceRequest.FRAME_RATE_RANGE_UNSPECIFIED
).get().toMediaFormat()
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 a10d019..3858066 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
@@ -1179,6 +1179,7 @@
Timebase.UPTIME,
mediaSpec.getVideoSpec(),
resolution,
+ dynamicRange,
expectedFrameRate);
return videoEncoderInfoFinder.apply(videoEncoderConfig);
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 c908b8a..1985020 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
@@ -24,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.SurfaceRequest;
import androidx.camera.core.impl.Timebase;
@@ -288,8 +289,9 @@
@Nullable VideoValidatedEncoderProfilesProxy resolvedEncoderProfiles,
@NonNull MediaSpec mediaSpec,
@NonNull CallbackToFutureAdapter.Completer<Encoder> configureCompleter) {
- VideoMimeInfo videoMimeInfo = resolveVideoMimeInfo(mediaSpec,
- surfaceRequest.getDynamicRange(), resolvedEncoderProfiles);
+ DynamicRange dynamicRange = surfaceRequest.getDynamicRange();
+ VideoMimeInfo videoMimeInfo = resolveVideoMimeInfo(mediaSpec, dynamicRange,
+ 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.
@@ -299,6 +301,7 @@
timebase,
mediaSpec.getVideoSpec(),
surfaceRequest.getResolution(),
+ dynamicRange,
surfaceRequest.getExpectedFrameRate());
try {
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 3d10c5b..6d7d97f6 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
@@ -171,16 +171,18 @@
@NonNull
public static VideoEncoderConfig resolveVideoEncoderConfig(@NonNull VideoMimeInfo videoMimeInfo,
@NonNull Timebase inputTimebase, @NonNull VideoSpec videoSpec,
- @NonNull Size surfaceSize, @NonNull Range<Integer> expectedFrameRateRange) {
+ @NonNull Size surfaceSize, @NonNull DynamicRange dynamicRange,
+ @NonNull Range<Integer> expectedFrameRateRange
+ ) {
Supplier<VideoEncoderConfig> configSupplier;
VideoProfileProxy videoProfile = videoMimeInfo.getCompatibleVideoProfile();
if (videoProfile != null) {
configSupplier = new VideoEncoderConfigVideoProfileResolver(
videoMimeInfo.getMimeType(), inputTimebase, videoSpec, surfaceSize,
- videoProfile, expectedFrameRateRange);
+ videoProfile, dynamicRange, expectedFrameRateRange);
} else {
configSupplier = new VideoEncoderConfigDefaultResolver(videoMimeInfo.getMimeType(),
- inputTimebase, videoSpec, surfaceSize, expectedFrameRateRange);
+ inputTimebase, videoSpec, surfaceSize, dynamicRange, expectedFrameRateRange);
}
return configSupplier.get();
@@ -188,10 +190,13 @@
static int scaleAndClampBitrate(
int baseBitrate,
+ int actualBitDepth, int baseBitDepth,
int actualFrameRate, int baseFrameRate,
int actualWidth, int baseWidth,
int actualHeight, int baseHeight,
@NonNull Range<Integer> clampedRange) {
+ // Scale bit depth to match new bit depth
+ Rational bitDepthRatio = new Rational(actualBitDepth, baseBitDepth);
// Scale bitrate to match current frame rate
Rational frameRateRatio = new Rational(actualFrameRate, baseFrameRate);
// Scale bitrate depending on number of actual pixels relative to profile's
@@ -201,14 +206,15 @@
Rational widthRatio = new Rational(actualWidth, baseWidth);
Rational heightRatio = new Rational(actualHeight, baseHeight);
int resolvedBitrate =
- (int) (baseBitrate * frameRateRatio.doubleValue() * widthRatio.doubleValue()
- * heightRatio.doubleValue());
+ (int) (baseBitrate * bitDepthRatio.doubleValue() * frameRateRatio.doubleValue()
+ * widthRatio.doubleValue() * heightRatio.doubleValue());
String debugString = "";
if (Logger.isDebugEnabled(TAG)) {
- debugString = String.format("Base Bitrate(%dbps) * Frame Rate Ratio(%d / %d) * Width "
- + "Ratio(%d / %d) * Height Ratio(%d / %d) = %d", baseBitrate,
- actualFrameRate,
+ debugString = String.format("Base Bitrate(%dbps) * Bit Depth Ratio (%d / %d) * "
+ + "Frame Rate Ratio(%d / %d) * Width Ratio(%d / %d) * "
+ + "Height Ratio(%d / %d) = %d", baseBitrate,
+ actualBitDepth, baseBitDepth, actualFrameRate,
baseFrameRate, actualWidth, baseWidth, actualHeight, baseHeight,
resolvedBitrate);
}
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigDefaultResolver.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigDefaultResolver.java
index 7d09ed2..8aed0f6 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigDefaultResolver.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigDefaultResolver.java
@@ -21,11 +21,13 @@
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
+import androidx.camera.core.DynamicRange;
import androidx.camera.core.Logger;
import androidx.camera.core.SurfaceRequest;
import androidx.camera.core.impl.Timebase;
import androidx.camera.video.VideoSpec;
import androidx.camera.video.internal.encoder.VideoEncoderConfig;
+import androidx.camera.video.internal.utils.DynamicRangeUtil;
import androidx.core.util.Supplier;
import java.util.Objects;
@@ -45,6 +47,7 @@
private static final Size VIDEO_SIZE_BASE = new Size(1280, 720);
private static final int VIDEO_FRAME_RATE_BASE = 30;
static final int VIDEO_FRAME_RATE_FIXED_DEFAULT = 30;
+ private static final int VIDEO_BIT_DEPTH_BASE = 8;
private static final Range<Integer> VALID_FRAME_RATE_RANGE = new Range<>(1, 60);
private final String mMimeType;
@@ -52,6 +55,7 @@
private final Timebase mInputTimebase;
private final VideoSpec mVideoSpec;
private final Size mSurfaceSize;
+ private final DynamicRange mDynamicRange;
private final Range<Integer> mExpectedFrameRateRange;
/**
@@ -63,6 +67,7 @@
* be used with the video encoder.
* @param surfaceSize The size of the surface required by the camera for the video
* encoder.
+ * @param dynamicRange The dynamic range of input frames.
* @param expectedFrameRateRange The expected source frame rate range. This should act as an
* envelope for any frame rate calculated from {@code videoSpec
* } and {@code videoProfile} since the source should not
@@ -73,11 +78,13 @@
*/
public VideoEncoderConfigDefaultResolver(@NonNull String mimeType,
@NonNull Timebase inputTimebase, @NonNull VideoSpec videoSpec,
- @NonNull Size surfaceSize, @NonNull Range<Integer> expectedFrameRateRange) {
+ @NonNull Size surfaceSize, @NonNull DynamicRange dynamicRange,
+ @NonNull Range<Integer> expectedFrameRateRange) {
mMimeType = mimeType;
mInputTimebase = inputTimebase;
mVideoSpec = videoSpec;
mSurfaceSize = surfaceSize;
+ mDynamicRange = dynamicRange;
mExpectedFrameRateRange = expectedFrameRateRange;
}
@@ -92,17 +99,22 @@
// We have no other information to go off of. Scale based on fallback defaults.
int resolvedBitrate = VideoConfigUtil.scaleAndClampBitrate(
VIDEO_BITRATE_BASE,
+ mDynamicRange.getBitDepth(), VIDEO_BIT_DEPTH_BASE,
resolvedFrameRate, VIDEO_FRAME_RATE_BASE,
mSurfaceSize.getWidth(), VIDEO_SIZE_BASE.getWidth(),
mSurfaceSize.getHeight(), VIDEO_SIZE_BASE.getHeight(),
videoSpecBitrateRange);
+ int resolvedProfile = DynamicRangeUtil.dynamicRangeToCodecProfileLevelForMime(
+ mMimeType, mDynamicRange);
+
return VideoEncoderConfig.builder()
.setMimeType(mMimeType)
.setInputTimebase(mInputTimebase)
.setResolution(mSurfaceSize)
.setBitrate(resolvedBitrate)
.setFrameRate(resolvedFrameRate)
+ .setProfile(resolvedProfile)
.build();
}
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolver.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolver.java
index dc374ae..4b1a958 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolver.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolver.java
@@ -21,6 +21,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
+import androidx.camera.core.DynamicRange;
import androidx.camera.core.Logger;
import androidx.camera.core.SurfaceRequest;
import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy;
@@ -38,7 +39,6 @@
*/
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
public class VideoEncoderConfigVideoProfileResolver implements Supplier<VideoEncoderConfig> {
-
private static final String TAG = "VidEncVdPrflRslvr";
private final String mMimeType;
@@ -46,6 +46,7 @@
private final VideoSpec mVideoSpec;
private final Size mSurfaceSize;
private final VideoProfileProxy mVideoProfile;
+ private final DynamicRange mDynamicRange;
private final Range<Integer> mExpectedFrameRateRange;
/**
@@ -58,6 +59,7 @@
* @param surfaceSize The size of the surface required by the camera for the video encoder.
* @param videoProfile The {@link VideoProfileProxy} used to resolve automatic and range
* settings.
+ * @param dynamicRange The dynamic range of input frames.
* @param expectedFrameRateRange The expected source frame rate range. This should act as an
* envelope for any frame rate calculated from {@code videoSpec}
* and {@code videoProfile} since the source should not
@@ -71,12 +73,14 @@
@NonNull VideoSpec videoSpec,
@NonNull Size surfaceSize,
@NonNull VideoProfileProxy videoProfile,
+ @NonNull DynamicRange dynamicRange,
@NonNull Range<Integer> expectedFrameRateRange) {
mMimeType = mimeType;
mInputTimebase = inputTimebase;
mVideoSpec = videoSpec;
mSurfaceSize = surfaceSize;
mVideoProfile = videoProfile;
+ mDynamicRange = dynamicRange;
mExpectedFrameRateRange = expectedFrameRateRange;
}
@@ -90,17 +94,21 @@
Logger.d(TAG, "Using resolved VIDEO bitrate from EncoderProfiles");
int resolvedBitrate = VideoConfigUtil.scaleAndClampBitrate(
mVideoProfile.getBitrate(),
+ mDynamicRange.getBitDepth(), mVideoProfile.getBitDepth(),
resolvedFrameRate, mVideoProfile.getFrameRate(),
mSurfaceSize.getWidth(), mVideoProfile.getWidth(),
mSurfaceSize.getHeight(), mVideoProfile.getHeight(),
videoSpecBitrateRange);
+ int resolvedProfile = mVideoProfile.getProfile();
+
return VideoEncoderConfig.builder()
.setMimeType(mMimeType)
.setInputTimebase(mInputTimebase)
.setResolution(mSurfaceSize)
.setBitrate(resolvedBitrate)
.setFrameRate(resolvedFrameRate)
+ .setProfile(resolvedProfile)
.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 0f27e50..3cd26a3 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
@@ -21,10 +21,26 @@
import static android.media.EncoderProfiles.VideoProfile.HDR_HDR10PLUS;
import static android.media.EncoderProfiles.VideoProfile.HDR_HLG;
import static android.media.EncoderProfiles.VideoProfile.HDR_NONE;
+import static android.media.MediaCodecInfo.CodecProfileLevel.AV1ProfileMain10;
+import static android.media.MediaCodecInfo.CodecProfileLevel.AV1ProfileMain10HDR10;
+import static android.media.MediaCodecInfo.CodecProfileLevel.AV1ProfileMain10HDR10Plus;
+import static android.media.MediaCodecInfo.CodecProfileLevel.AV1ProfileMain8;
+import static android.media.MediaCodecInfo.CodecProfileLevel.DolbyVisionProfileDvavSe;
+import static android.media.MediaCodecInfo.CodecProfileLevel.DolbyVisionProfileDvheSt;
+import static android.media.MediaCodecInfo.CodecProfileLevel.HEVCProfileMain;
+import static android.media.MediaCodecInfo.CodecProfileLevel.HEVCProfileMain10;
+import static android.media.MediaCodecInfo.CodecProfileLevel.HEVCProfileMain10HDR10;
+import static android.media.MediaCodecInfo.CodecProfileLevel.HEVCProfileMain10HDR10Plus;
+import static android.media.MediaCodecInfo.CodecProfileLevel.VP9Profile0;
+import static android.media.MediaCodecInfo.CodecProfileLevel.VP9Profile2;
+import static android.media.MediaCodecInfo.CodecProfileLevel.VP9Profile2HDR;
+import static android.media.MediaCodecInfo.CodecProfileLevel.VP9Profile2HDR10Plus;
import static androidx.camera.core.DynamicRange.BIT_DEPTH_10_BIT;
import static androidx.camera.core.DynamicRange.BIT_DEPTH_8_BIT;
import static androidx.camera.core.DynamicRange.BIT_DEPTH_UNSPECIFIED;
+import static androidx.camera.core.DynamicRange.DOLBY_VISION_10_BIT;
+import static androidx.camera.core.DynamicRange.DOLBY_VISION_8_BIT;
import static androidx.camera.core.DynamicRange.ENCODING_DOLBY_VISION;
import static androidx.camera.core.DynamicRange.ENCODING_HDR10;
import static androidx.camera.core.DynamicRange.ENCODING_HDR10_PLUS;
@@ -32,15 +48,22 @@
import static androidx.camera.core.DynamicRange.ENCODING_HLG;
import static androidx.camera.core.DynamicRange.ENCODING_SDR;
import static androidx.camera.core.DynamicRange.ENCODING_UNSPECIFIED;
+import static androidx.camera.core.DynamicRange.HDR10_10_BIT;
+import static androidx.camera.core.DynamicRange.HDR10_PLUS_10_BIT;
+import static androidx.camera.core.DynamicRange.HLG_10_BIT;
+import static androidx.camera.core.DynamicRange.SDR;
import static androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy.BIT_DEPTH_10;
import static androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy.BIT_DEPTH_8;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
+import android.media.MediaFormat;
+
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.camera.core.DynamicRange;
+import androidx.camera.core.impl.EncoderProfilesProxy;
import java.util.Collections;
import java.util.HashMap;
@@ -53,10 +76,11 @@
*/
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
public class DynamicRangeUtil {
-
public static final Map<Integer, Set<Integer>> DR_TO_VP_BIT_DEPTH_MAP = new HashMap<>();
public static final Map<Integer, Set<Integer>> DR_TO_VP_FORMAT_MAP = new HashMap<>();
public static final Map<Integer, Integer> VP_TO_DR_FORMAT_MAP = new HashMap<>();
+ private static final Map<String, Map<DynamicRange, Integer>> MIME_TO_DEFAULT_PROFILE_LEVEL_MAP =
+ new HashMap<>();
private DynamicRangeUtil() {
}
@@ -86,6 +110,46 @@
VP_TO_DR_FORMAT_MAP.put(HDR_HDR10, ENCODING_HDR10);
VP_TO_DR_FORMAT_MAP.put(HDR_HDR10PLUS, ENCODING_HDR10_PLUS);
VP_TO_DR_FORMAT_MAP.put(HDR_DOLBY_VISION, ENCODING_DOLBY_VISION);
+
+ //--------------------------------------------------------------------------------------//
+ // Default CodecProfileLevel mappings from //
+ // frameworks/av/media/codec2/sfplugin/utils/Codec2Mapper.cpp //
+ //--------------------------------------------------------------------------------------//
+ // DynamicRange encodings to HEVC profiles
+ Map<DynamicRange, Integer> hevcMap = new HashMap<>();
+ hevcMap.put(SDR, HEVCProfileMain);
+ hevcMap.put(HLG_10_BIT, HEVCProfileMain10);
+ hevcMap.put(HDR10_10_BIT, HEVCProfileMain10HDR10);
+ hevcMap.put(HDR10_PLUS_10_BIT, HEVCProfileMain10HDR10Plus);
+
+ // DynamicRange encodings to AV1 profiles for YUV 4:2:0 chroma subsampling
+ Map<DynamicRange, Integer> av1420Map = new HashMap<>();
+ av1420Map.put(SDR, AV1ProfileMain8);
+ av1420Map.put(HLG_10_BIT, AV1ProfileMain10);
+ av1420Map.put(HDR10_10_BIT, AV1ProfileMain10HDR10);
+ av1420Map.put(HDR10_PLUS_10_BIT, AV1ProfileMain10HDR10Plus);
+
+ // DynamicRange encodings to VP9 profile for YUV 4:2:0 chroma subsampling
+ Map<DynamicRange, Integer> vp9420Map = new HashMap<>();
+ vp9420Map.put(SDR, VP9Profile0);
+ vp9420Map.put(HLG_10_BIT, VP9Profile2);
+ vp9420Map.put(HDR10_10_BIT, VP9Profile2HDR);
+ vp9420Map.put(HDR10_PLUS_10_BIT, VP9Profile2HDR10Plus);
+
+ // Dolby vision encodings to dolby vision profiles
+ Map<DynamicRange, Integer> dvMap = new HashMap<>();
+ // Taken from the (now deprecated) Dolby Vision Profile Specification 1.3.3
+ // DV Profile 8 (10-bit HEVC)
+ dvMap.put(DOLBY_VISION_10_BIT, DolbyVisionProfileDvheSt);
+ // DV Profile 9 (8-bit AVC)
+ dvMap.put(DOLBY_VISION_8_BIT, DolbyVisionProfileDvavSe);
+
+ // Combine all mime type maps
+ MIME_TO_DEFAULT_PROFILE_LEVEL_MAP.put(MediaFormat.MIMETYPE_VIDEO_HEVC, hevcMap);
+ MIME_TO_DEFAULT_PROFILE_LEVEL_MAP.put(MediaFormat.MIMETYPE_VIDEO_AV1, av1420Map);
+ MIME_TO_DEFAULT_PROFILE_LEVEL_MAP.put(MediaFormat.MIMETYPE_VIDEO_VP9, vp9420Map);
+ MIME_TO_DEFAULT_PROFILE_LEVEL_MAP.put(MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION, dvMap);
+ //--------------------------------------------------------------------------------------//
}
/**
@@ -126,4 +190,26 @@
}
return bitDepths;
}
+
+ /**
+ * Returns a codec profile level for a given mime type and dynamic range.
+ *
+ * <p>If the mime type or dynamic range is not supported, returns
+ * {@link EncoderProfilesProxy#CODEC_PROFILE_NONE}.
+ *
+ * <p>Only fully-specified dynamic ranges are supported. All other dynamic ranges will return
+ * {@link EncoderProfilesProxy#CODEC_PROFILE_NONE}.
+ */
+ public static int dynamicRangeToCodecProfileLevelForMime(@NonNull String mimeType,
+ @NonNull DynamicRange dynamicRange) {
+ Map<DynamicRange, Integer> hdrToProfile = MIME_TO_DEFAULT_PROFILE_LEVEL_MAP.get(mimeType);
+ if (hdrToProfile != null) {
+ Integer profile = hdrToProfile.get(dynamicRange);
+ if (profile != null) {
+ return profile;
+ }
+ }
+
+ return EncoderProfilesProxy.CODEC_PROFILE_NONE;
+ }
}
diff --git a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/EffectsFragment.kt b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/EffectsFragment.kt
new file mode 100644
index 0000000..da8ec12
--- /dev/null
+++ b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/EffectsFragment.kt
@@ -0,0 +1,37 @@
+/*
+ * 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.integration.view
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+/**
+ * Fragment for testing effects integration.
+ */
+class EffectsFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ return null
+ }
+}
\ No newline at end of file
diff --git a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/MainActivity.java b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/MainActivity.java
index 970b5d8..6e40f89 100644
--- a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/MainActivity.java
+++ b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/MainActivity.java
@@ -190,6 +190,9 @@
case R.id.mlkit:
mFragmentType = FragmentType.MLKIT;
break;
+ case R.id.effects:
+ mFragmentType = FragmentType.EFFECTS;
+ break;
}
startFragment();
return true;
@@ -222,6 +225,9 @@
case MLKIT:
startFragment(R.string.mlkit, new MlKitFragment());
break;
+ case EFFECTS:
+ startFragment(R.string.effects, new EffectsFragment());
+ break;
}
}
@@ -243,6 +249,6 @@
}
private enum FragmentType {
- PREVIEW_VIEW, CAMERA_CONTROLLER, TRANSFORM, COMPOSE_UI, MLKIT
+ PREVIEW_VIEW, CAMERA_CONTROLLER, TRANSFORM, COMPOSE_UI, MLKIT, EFFECTS
}
}
diff --git a/camera/integration-tests/viewtestapp/src/main/res/menu/actionbar_menu.xml b/camera/integration-tests/viewtestapp/src/main/res/menu/actionbar_menu.xml
index 4a8d889..b850fd4 100644
--- a/camera/integration-tests/viewtestapp/src/main/res/menu/actionbar_menu.xml
+++ b/camera/integration-tests/viewtestapp/src/main/res/menu/actionbar_menu.xml
@@ -33,6 +33,10 @@
android:title="@string/compose_ui"
app:showAsAction="never" />
<item
+ android:id="@+id/effects"
+ android:title="@string/effects"
+ app:showAsAction="never" />
+ <item
android:id="@+id/mlkit"
android:title="@string/mlkit"
app:showAsAction="never" />
diff --git a/camera/integration-tests/viewtestapp/src/main/res/values/donottranslate-strings.xml b/camera/integration-tests/viewtestapp/src/main/res/values/donottranslate-strings.xml
index 1c62930..ede2d56 100644
--- a/camera/integration-tests/viewtestapp/src/main/res/values/donottranslate-strings.xml
+++ b/camera/integration-tests/viewtestapp/src/main/res/values/donottranslate-strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">CameraX Views Demo</string>
-
+ <string name="effects">Effects</string>
<string name="preview">Preview</string>
<string name="btn_capture">Capture</string>
<string name="btn_video_record">Record</string>
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsPaddingTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsPaddingTest.kt
index ca4f233..3aba669 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsPaddingTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsPaddingTest.kt
@@ -349,11 +349,19 @@
with(LocalDensity.current) {
CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) {
Box(
- Modifier.fillMaxSize().padding(5.toDp(), 4.toDp(), 3.toDp(), 2.toDp())
+ Modifier
+ .fillMaxSize()
+ .padding(5.toDp(), 4.toDp(), 3.toDp(), 2.toDp())
.consumeWindowInsets(WindowInsets(5, 4, 3, 2))
) {
- Box(Modifier.fillMaxSize().systemBarsPadding()) {
- Box(Modifier.fillMaxSize().onGloballyPositioned { coordinates = it })
+ Box(
+ Modifier
+ .fillMaxSize()
+ .systemBarsPadding()) {
+ Box(
+ Modifier
+ .fillMaxSize()
+ .onGloballyPositioned { coordinates = it })
}
}
}
@@ -382,7 +390,10 @@
CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) {
Box(Modifier.statusBarsPadding()) {
Box(Modifier.systemBarsPadding()) {
- Box(Modifier.fillMaxSize().onGloballyPositioned { coordinates = it })
+ Box(
+ Modifier
+ .fillMaxSize()
+ .onGloballyPositioned { coordinates = it })
}
}
}
@@ -415,9 +426,12 @@
CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) {
Box(consumingModifier) {
val density = LocalDensity.current
- Box(Modifier.fillMaxSize().onConsumedWindowInsetsChanged {
- top = it.getTop(density)
- })
+ Box(
+ Modifier
+ .fillMaxSize()
+ .onConsumedWindowInsetsChanged {
+ top = it.getTop(density)
+ })
}
}
}
@@ -517,7 +531,10 @@
@Test
fun animateImeInsets() {
with(Api30Methods(rule)) {
- val coordinates = setInsetContent { Modifier.systemBarsPadding().imePadding() }
+ val coordinates = setInsetContent {
+ Modifier
+ .systemBarsPadding()
+ .imePadding() }
sendInsets(WindowInsetsCompat.Type.systemBars())
@@ -568,8 +585,14 @@
setContent {
val padding = WindowInsets.systemBars.asPaddingValues()
- Box(Modifier.fillMaxSize().padding(padding)) {
- Box(Modifier.fillMaxSize().onGloballyPositioned { coordinates = it })
+ Box(
+ Modifier
+ .fillMaxSize()
+ .padding(padding)) {
+ Box(
+ Modifier
+ .fillMaxSize()
+ .onGloballyPositioned { coordinates = it })
}
}
@@ -602,8 +625,15 @@
.statusBarsPadding()
.onGloballyPositioned { statusBar = it }
) {
- Box(Modifier.navigationBarsPadding().onGloballyPositioned { navigationBar = it }) {
- Box(Modifier.imePadding().fillMaxSize().onGloballyPositioned { ime = it })
+ Box(
+ Modifier
+ .navigationBarsPadding()
+ .onGloballyPositioned { navigationBar = it }) {
+ Box(
+ Modifier
+ .imePadding()
+ .fillMaxSize()
+ .onGloballyPositioned { ime = it })
}
}
}
@@ -692,10 +722,11 @@
.windowInsetsPadding(WindowInsets(top = 10))
.onGloballyPositioned { outer = it }
) {
- Box(Modifier
- .consumeWindowInsets(WindowInsets(top = 10))
- .windowInsetsPadding(WindowInsets(top = 20))
- .onGloballyPositioned { middle = it }
+ Box(
+ Modifier
+ .consumeWindowInsets(WindowInsets(top = 10))
+ .windowInsetsPadding(WindowInsets(top = 20))
+ .onGloballyPositioned { middle = it }
) {
Box(
Modifier
@@ -773,7 +804,10 @@
ComposeView(context).also {
it.consumeWindowInsets = false
it.setContent {
- Box(Modifier.fillMaxSize().statusBarsPadding())
+ Box(
+ Modifier
+ .fillMaxSize()
+ .statusBarsPadding())
}
}
})
@@ -812,6 +846,36 @@
assertThat(bottomInset).isEqualTo(0)
}
+ @OptIn(ExperimentalLayoutApi::class)
+ @Test
+ fun reuseModifier() {
+ var consumed1 = WindowInsets(0, 0, 0, 0)
+ var consumed2 = WindowInsets(0, 0, 0, 0)
+ setContent {
+ with(LocalDensity.current) {
+ val modifier = Modifier.consumeWindowInsets(PaddingValues(10.toDp()))
+ Box(
+ modifier
+ .fillMaxSize()
+ .onConsumedWindowInsetsChanged { consumed1 = it }
+ ) {
+ Box(
+ modifier
+ .fillMaxSize()
+ .onConsumedWindowInsetsChanged { consumed2 = it }
+ )
+ }
+ }
+ }
+
+ rule.waitForIdle()
+ sendInsets(WindowInsetsCompat.Type.statusBars(), AndroidXInsets.of(0, 30, 0, 0))
+ rule.runOnIdle {
+ assertThat(consumed1.getTop(rule.density)).isEqualTo(10)
+ assertThat(consumed2.getTop(rule.density)).isEqualTo(20)
+ }
+ }
+
private fun sendInsets(
type: Int,
sentInsets: AndroidXInsets = AndroidXInsets.of(10, 11, 12, 13)
@@ -838,10 +902,17 @@
lateinit var coordinates: LayoutCoordinates
setContent {
- Box(Modifier.fillMaxSize().background(Color.Blue).then(insetsModifier())) {
- Box(Modifier.fillMaxSize().onGloballyPositioned {
- coordinates = it
- })
+ Box(
+ Modifier
+ .fillMaxSize()
+ .background(Color.Blue)
+ .then(insetsModifier())) {
+ Box(
+ Modifier
+ .fillMaxSize()
+ .onGloballyPositioned {
+ coordinates = it
+ })
}
}
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/WindowInsetsPadding.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/WindowInsetsPadding.kt
index f8e7312..5f64e2d 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/WindowInsetsPadding.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/WindowInsetsPadding.kt
@@ -19,8 +19,10 @@
import androidx.compose.runtime.Stable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
+import androidx.compose.ui.composed
import androidx.compose.ui.layout.LayoutModifier
import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasureResult
@@ -30,8 +32,6 @@
import androidx.compose.ui.modifier.ModifierLocalReadScope
import androidx.compose.ui.modifier.ProvidableModifierLocal
import androidx.compose.ui.modifier.modifierLocalOf
-import androidx.compose.ui.platform.InspectorInfo
-import androidx.compose.ui.platform.InspectorValueInfo
import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.constrainHeight
@@ -53,12 +53,14 @@
* @see WindowInsets
*/
@Stable
-fun Modifier.windowInsetsPadding(insets: WindowInsets): Modifier = this.then(
- InsetsPaddingModifier(insets, debugInspectorInfo {
+fun Modifier.windowInsetsPadding(insets: WindowInsets): Modifier = composed(
+ debugInspectorInfo {
name = "windowInsetsPadding"
properties["insets"] = insets
- })
-)
+ }
+) {
+ remember(insets) { InsetsPaddingModifier(insets) }
+}
/**
* Consume insets that haven't been consumed yet by other insets Modifiers similar to
@@ -71,12 +73,15 @@
* @sample androidx.compose.foundation.layout.samples.consumedInsetsSample
*/
@Stable
-fun Modifier.consumeWindowInsets(insets: WindowInsets): Modifier = this.then(
- UnionInsetsConsumingModifier(insets, debugInspectorInfo {
+fun Modifier.consumeWindowInsets(insets: WindowInsets): Modifier = composed(
+ debugInspectorInfo {
name = "consumeWindowInsets"
properties["insets"] = insets
- })
-)
+ }
+) {
+ remember(insets) { UnionInsetsConsumingModifier(insets) }
+}
+
@ExperimentalLayoutApi
@Deprecated("Use consumeWindowInsets", ReplaceWith("this.consumeWindowInsets(insets)"))
@Stable
@@ -98,12 +103,16 @@
*/
@ExperimentalLayoutApi
@Stable
-fun Modifier.consumeWindowInsets(paddingValues: PaddingValues): Modifier = this.then(
- PaddingValuesConsumingModifier(paddingValues, debugInspectorInfo {
+fun Modifier.consumeWindowInsets(paddingValues: PaddingValues): Modifier = composed(
+ debugInspectorInfo {
name = "consumeWindowInsets"
properties["paddingValues"] = paddingValues
- })
-)
+ }
+) {
+ remember(paddingValues) {
+ PaddingValuesConsumingModifier(paddingValues)
+ }
+}
@ExperimentalLayoutApi
@Deprecated("Use consumeWindowInsets", ReplaceWith("this.consumeWindowInsets(paddingValues)"))
@@ -120,15 +129,16 @@
@Stable
fun Modifier.onConsumedWindowInsetsChanged(
block: (consumedWindowInsets: WindowInsets) -> Unit
-) = this.then(
- ConsumedInsetsModifier(
- block,
- debugInspectorInfo {
- name = "onConsumedWindowInsetsChanged"
- properties["block"] = block
- }
- )
-)
+) = composed(
+ debugInspectorInfo {
+ name = "onConsumedWindowInsetsChanged"
+ properties["block"] = block
+ }
+) {
+ remember(block) {
+ ConsumedInsetsModifier(block)
+ }
+}
@ExperimentalLayoutApi
@Deprecated(
@@ -145,12 +155,8 @@
}
internal class InsetsPaddingModifier(
- private val insets: WindowInsets,
- inspectorInfo: InspectorInfo.() -> Unit = debugInspectorInfo {
- name = "InsetsPaddingModifier"
- properties["insets"] = insets
- }
-) : InspectorValueInfo(inspectorInfo), LayoutModifier,
+ private val insets: WindowInsets
+) : LayoutModifier,
ModifierLocalConsumer, ModifierLocalProvider<WindowInsets> {
private var unconsumedInsets: WindowInsets by mutableStateOf(insets)
private var consumedInsets: WindowInsets by mutableStateOf(insets)
@@ -209,9 +215,8 @@
* Base class for arbitrary insets consumption modifiers.
*/
@Stable
-private sealed class InsetsConsumingModifier(
- inspectorInfo: InspectorInfo.() -> Unit
-) : InspectorValueInfo(inspectorInfo), ModifierLocalConsumer, ModifierLocalProvider<WindowInsets> {
+private sealed class InsetsConsumingModifier : ModifierLocalConsumer,
+ ModifierLocalProvider<WindowInsets> {
private var consumedInsets: WindowInsets by mutableStateOf(WindowInsets(0, 0, 0, 0))
abstract fun calculateInsets(modifierLocalInsets: WindowInsets): WindowInsets
@@ -232,9 +237,8 @@
@Stable
private class PaddingValuesConsumingModifier(
- private val paddingValues: PaddingValues,
- inspectorInfo: InspectorInfo.() -> Unit
-) : InsetsConsumingModifier(inspectorInfo) {
+ private val paddingValues: PaddingValues
+) : InsetsConsumingModifier() {
override fun calculateInsets(modifierLocalInsets: WindowInsets): WindowInsets =
paddingValues.asInsets().add(modifierLocalInsets)
@@ -254,9 +258,8 @@
@Stable
private class ConsumedInsetsModifier(
- private val block: (WindowInsets) -> Unit,
- inspectorInfo: InspectorInfo.() -> Unit
-) : InspectorValueInfo(inspectorInfo), ModifierLocalConsumer {
+ private val block: (WindowInsets) -> Unit
+) : ModifierLocalConsumer {
private var oldWindowInsets: WindowInsets? = null
@@ -284,9 +287,8 @@
@Stable
private class UnionInsetsConsumingModifier(
- private val insets: WindowInsets,
- inspectorInfo: InspectorInfo.() -> Unit
-) : InsetsConsumingModifier(inspectorInfo) {
+ private val insets: WindowInsets
+) : InsetsConsumingModifier() {
override fun calculateInsets(modifierLocalInsets: WindowInsets): WindowInsets =
insets.union(modifierLocalInsets)
@@ -302,4 +304,4 @@
}
override fun hashCode(): Int = insets.hashCode()
-}
\ No newline at end of file
+}
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/AnchoredDraggable.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/AnchoredDraggable.kt
index c93036a..3612967 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/AnchoredDraggable.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/AnchoredDraggable.kt
@@ -183,9 +183,7 @@
* Strongly consider using [requireOffset] which will throw if the offset is read before it is
* initialized. This helps catch issues early in your workflow.
*/
- // Todo: Use primitive state when b/281205384 is fixed
- @Suppress("AutoboxingStateCreation")
- var offset: Float by mutableStateOf(Float.NaN)
+ var offset: Float by mutableFloatStateOf(Float.NaN)
private set
/**
diff --git a/compose/runtime/runtime/src/androidMain/kotlin/androidx/compose/runtime/internal/FloatingPointEquality.android.kt b/compose/runtime/runtime/src/androidMain/kotlin/androidx/compose/runtime/internal/FloatingPointEquality.android.kt
new file mode 100644
index 0000000..61845d3
--- /dev/null
+++ b/compose/runtime/runtime/src/androidMain/kotlin/androidx/compose/runtime/internal/FloatingPointEquality.android.kt
@@ -0,0 +1,53 @@
+/*
+ * 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.runtime.internal
+
+import android.os.Build
+
+/**
+ * Returns `true` if the receiver is an expression of [Float.NaN]. There is not one single encoding
+ * of `NaN`. A float encodes NaN if its exponent bits (the 8 most significant bits which follow the
+ * single most significant bit in the float, which encodes the sign) are all set to `1`, and the
+ * significand bits (the 23 least significant bits) are not all zeros.
+ */
+internal val Float.isNan: Boolean
+ get() = (this.toRawBits() and 0x7FFFFFFF) > 0x7F800000
+
+/**
+ * Returns `true` if the receiver is an expression of [Double.NaN]. There is not one single encoding
+ * of `NaN`. A double encodes NaN if its exponent bits (the 11 most significant bits which follow
+ * the single most significant bit in the double, which encodes the sign) are all set to `1`, and
+ * the significand bits (the 53 least significant bits) are not all zeros.
+ */
+internal val Double.isNan: Boolean
+ get() = (this.toRawBits() and 0x7FFFFFFFFFFFFFFF) > 0x7FF0000000000000
+
+@Suppress("NOTHING_TO_INLINE")
+internal actual inline fun Float.equalsWithNanFix(other: Float): Boolean =
+ if (Build.VERSION.SDK_INT >= 23) {
+ this == other
+ } else {
+ !this.isNan && !other.isNan && this == other
+ }
+
+@Suppress("NOTHING_TO_INLINE")
+internal actual inline fun Double.equalsWithNanFix(other: Double): Boolean =
+ if (Build.VERSION.SDK_INT >= 23) {
+ this == other
+ } else {
+ !this.isNan && !other.isNan && this == other
+ }
\ No newline at end of file
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotDoubleState.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotDoubleState.kt
index 8521c5a..3868163 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotDoubleState.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotDoubleState.kt
@@ -19,6 +19,7 @@
package androidx.compose.runtime
import androidx.compose.runtime.internal.JvmDefaultWithCompatibility
+import androidx.compose.runtime.internal.equalsWithNanFix
import androidx.compose.runtime.snapshots.AutoboxingStateValueProperty
import androidx.compose.runtime.snapshots.Snapshot
import androidx.compose.runtime.snapshots.SnapshotMutableState
@@ -136,7 +137,7 @@
override var doubleValue: Double
get() = next.readable(this).value
set(value) = next.withCurrent {
- if (it.value != value) {
+ if (!it.value.equalsWithNanFix(value)) {
next.overwritable(this, it) { this.value = value }
}
}
@@ -161,7 +162,7 @@
): StateRecord? {
val currentRecord = current as DoubleStateStateRecord
val appliedRecord = applied as DoubleStateStateRecord
- return if (currentRecord.value == appliedRecord.value) {
+ return if (currentRecord.value.equalsWithNanFix(appliedRecord.value)) {
current
} else {
null
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotFloatState.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotFloatState.kt
index fa6bfe5..e6edf34 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotFloatState.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotFloatState.kt
@@ -18,6 +18,7 @@
@file:JvmMultifileClass
package androidx.compose.runtime
+import androidx.compose.runtime.internal.equalsWithNanFix
import androidx.compose.runtime.snapshots.AutoboxingStateValueProperty
import androidx.compose.runtime.snapshots.Snapshot
import androidx.compose.runtime.snapshots.SnapshotMutableState
@@ -132,7 +133,7 @@
override var floatValue: Float
get() = next.readable(this).value
set(value) = next.withCurrent {
- if (it.value != value) {
+ if (!it.value.equalsWithNanFix(value)) {
next.overwritable(this, it) { this.value = value }
}
}
@@ -157,7 +158,7 @@
): StateRecord? {
val currentRecord = current as FloatStateStateRecord
val appliedRecord = applied as FloatStateStateRecord
- return if (currentRecord.value == appliedRecord.value) {
+ return if (currentRecord.value.equalsWithNanFix(appliedRecord.value)) {
current
} else {
null
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/FloatingPointEquality.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/FloatingPointEquality.kt
new file mode 100644
index 0000000..0404016
--- /dev/null
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/FloatingPointEquality.kt
@@ -0,0 +1,45 @@
+/*
+ * 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.runtime.internal
+
+/**
+ * A backwards-compatible comparison check which returns true if the receiver and the [other]
+ * operands are equal to each other. Equality as specified in the IEEE-754 standard. If at least
+ * one operand is `NaN`, the result will always be `false`. The sign bit is ignored for operands
+ * that are zero (i.e. +0 and -0 will always be equal to one another). All other comparisons check
+ * the logical value of the float.
+ *
+ * This implementation is needed for proper behavior on x86 builds of Android SDK levels 21 and 22,
+ * which contain a bug where [Float.NaN] is equal to every other [Float] value.
+ *
+ * See [issue 281205384](b/281205384).
+ */
+internal expect inline fun Float.equalsWithNanFix(other: Float): Boolean
+
+/**
+ * A backwards-compatible comparison check which returns true if the receiver and the [other]
+ * operands are equal to each other. Equality as specified in the IEEE-754 standard. If at least
+ * one operand is `NaN`, the result will always be `false`. The sign bit is ignored for operands
+ * that are zero (i.e. +0 and -0 will always be equal to one another). All other comparisons check
+ * the logical value of the double.
+ *
+ * This implementation is needed for proper behavior on x86 builds of Android SDK levels 21 and 22,
+ * which contain a bug where [Double.NaN] is equal to every other [Double] value.
+ *
+ * See [issue 281205384](b/281205384).
+ */
+internal expect inline fun Double.equalsWithNanFix(other: Double): Boolean
\ No newline at end of file
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt
index 1df196c..f05ec76 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt
@@ -1833,7 +1833,20 @@
}
private fun validateOpen(snapshot: Snapshot) {
- if (!openSnapshots.get(snapshot.id)) error("Snapshot is not open")
+ val openSnapshots = openSnapshots
+ if (!openSnapshots.get(snapshot.id)) {
+ error(
+ "Snapshot is not open: id=${
+ snapshot.id
+ }, disposed=${
+ snapshot.disposed
+ }, applied=${
+ (snapshot as? MutableSnapshot)?.applied ?: "read-only"
+ }, lowestPin=${
+ sync { pinningTable.lowestOrDefault(-1) }
+ }"
+ )
+ }
}
/**
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/internal/FloatingPointEqualityTest.kt b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/internal/FloatingPointEqualityTest.kt
new file mode 100644
index 0000000..978dd87
--- /dev/null
+++ b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/internal/FloatingPointEqualityTest.kt
@@ -0,0 +1,178 @@
+/*
+ * 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.runtime.internal
+
+import kotlin.test.Test
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
+
+class FloatingPointEqualityTest {
+
+ @Test
+ fun testFloat_arbitraryValueEquality() {
+ assertEqualsWithNanFix(12345f, 12345f)
+ assertEqualsWithNanFix(-98.076f, -98.076f)
+ assertNotEqualsWithNanFix(12.34f, 12.30f)
+ }
+
+ @Test
+ fun testFloat_inequalityFromLossOfPrecision() {
+ assertNotEqualsWithNanFix(0.5f, 0.01f * 5)
+ }
+
+ @Test
+ fun testFloat_nanConstant_doesNotEqualItself() {
+ assertNotEqualsWithNanFix(Float.NaN, Float.NaN)
+ }
+
+ @Test
+ fun testFloat_nonCanonicalNans_areNotEqual() {
+ val unconventionalNan = Float.fromBits(0x7FC0ABCD)
+ assertNotEqualsWithNanFix(unconventionalNan, unconventionalNan)
+ }
+
+ @Test
+ fun testFloat_negativeZero_doesEqualsPositiveZero() {
+ assertEqualsWithNanFix(Float.NegativeZero, 0f)
+ }
+
+ @Test
+ fun testFloat_negativeZero_equalsNegativeZero() {
+ assertEqualsWithNanFix(Float.NegativeZero, Float.NegativeZero)
+ }
+
+ @Test
+ fun testFloat_positiveZero_equalsPositiveZero() {
+ assertEqualsWithNanFix(0f, 0f)
+ }
+
+ @Test
+ fun testFloat_positiveInfinity_EqualsPositiveInfinity() {
+ assertEqualsWithNanFix(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY)
+ }
+
+ @Test
+ fun testFloat_negativeInfinity_doesNotEqualPositiveInfinity() {
+ assertNotEqualsWithNanFix(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY)
+ }
+
+ @Test
+ fun testFloat_negativeInfinity_equalsNegativeInfinity() {
+ assertEqualsWithNanFix(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY)
+ }
+
+ @Test
+ fun testDouble_arbitraryValueEquality() {
+ assertEqualsWithNanFix(12345.0, 12345.0)
+ assertEqualsWithNanFix(-98.076, -98.076)
+ assertNotEqualsWithNanFix(12.34, 12.30)
+ }
+
+ @Test
+ fun testDouble_inequalityFromLossOfPrecision() {
+ assertNotEqualsWithNanFix(0.5, 0.01 * 5)
+ }
+
+ @Test
+ fun testDouble_nanConstant_doesNotEqualItself() {
+ assertNotEqualsWithNanFix(Double.NaN, Double.NaN)
+ }
+
+ @Test
+ fun testDouble_nonCanonicalNans_areNotEqual() {
+ val unconventionalNan = Double.fromBits(0x7FF0ABCDEF123456)
+ assertNotEqualsWithNanFix(unconventionalNan, unconventionalNan)
+ }
+
+ @Test
+ fun testDouble_negativeZero_doesEqualsPositiveZero() {
+ assertEqualsWithNanFix(Double.NegativeZero, 0f)
+ }
+
+ @Test
+ fun testDouble_negativeZero_equalsNegativeZero() {
+ assertEqualsWithNanFix(Double.NegativeZero, Double.NegativeZero)
+ }
+
+ @Test
+ fun testDouble_positiveZero_equalsPositiveZero() {
+ assertEqualsWithNanFix(0f, 0f)
+ }
+
+ @Test
+ fun testDouble_positiveInfinity_EqualsPositiveInfinity() {
+ assertEqualsWithNanFix(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY)
+ }
+
+ @Test
+ fun testDouble_negativeInfinity_doesNotEqualPositiveInfinity() {
+ assertNotEqualsWithNanFix(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY)
+ }
+
+ @Test
+ fun testDouble_negativeInfinity_equalsNegativeInfinity() {
+ assertEqualsWithNanFix(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY)
+ }
+
+ private fun assertNotEqualsWithNanFix(
+ first: Float,
+ second: Float
+ ) = assertFalse(
+ message = "$first (${first.bitString}) == $second (${second.bitString}) " +
+ "returned true, expected false",
+ actual = first.equalsWithNanFix(second)
+ )
+
+ private fun assertEqualsWithNanFix(
+ first: Float,
+ second: Float
+ ) = assertTrue(
+ message = "$first (${first.bitString}) == $second (${second.bitString}) " +
+ "returned false, expected true",
+ actual = first.equalsWithNanFix(second)
+ )
+
+ private fun assertNotEqualsWithNanFix(
+ first: Double,
+ second: Double
+ ) = assertFalse(
+ message = "$first (${first.bitString}) == $second (${second.bitString}) " +
+ "returned true, expected false",
+ actual = first.equalsWithNanFix(second)
+ )
+
+ private fun assertEqualsWithNanFix(
+ first: Double,
+ second: Double
+ ) = assertTrue(
+ message = "$first (${first.bitString}) == $second (${second.bitString}) " +
+ "returned false, expected true",
+ actual = first.equalsWithNanFix(second)
+ )
+
+ private val Float.bitString
+ get() = "0x" + toBits().toUInt().toString(16).padStart(length = 8, '0')
+
+ private val Double.bitString
+ get() = "0x" + toBits().toULong().toString(16).padStart(length = 16, '0')
+
+ private val Float.Companion.NegativeZero: Float
+ get() = Float.fromBits(0b1 shl 31)
+
+ private val Double.Companion.NegativeZero: Float
+ get() = Float.fromBits(0b1 shl 63)
+}
\ No newline at end of file
diff --git a/compose/runtime/runtime/src/desktopMain/kotlin/androidx/compose/runtime/internal/FloatingPointEquality.desktop.kt b/compose/runtime/runtime/src/desktopMain/kotlin/androidx/compose/runtime/internal/FloatingPointEquality.desktop.kt
new file mode 100644
index 0000000..be9c52f
--- /dev/null
+++ b/compose/runtime/runtime/src/desktopMain/kotlin/androidx/compose/runtime/internal/FloatingPointEquality.desktop.kt
@@ -0,0 +1,23 @@
+/*
+ * 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.runtime.internal
+
+@Suppress("NOTHING_TO_INLINE")
+internal actual inline fun Float.equalsWithNanFix(other: Float): Boolean = (this == other)
+
+@Suppress("NOTHING_TO_INLINE")
+internal actual inline fun Double.equalsWithNanFix(other: Double): Boolean = (this == other)
\ No newline at end of file
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt
index 3ec3fb7..00676b9 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt
@@ -913,6 +913,52 @@
}
@Test
+ fun cannotApplyASnapshotTwice() {
+ var state by mutableStateOf("initial")
+ val snapshot = takeMutableSnapshot()
+ try {
+ snapshot.enter { state = "mutated" }
+ snapshot.apply().check()
+ snapshot.apply().check()
+ fail("An exception should have been thrown by second apply()")
+ } catch (ise: IllegalStateException) {
+ // Expected exception
+ assertTrue(
+ ise.message?.let {
+ it.contains("Snapshot is not open") &&
+ it.contains("applied=")
+ } == true,
+ "Incorrect message: ${ise.message}"
+ )
+ } finally {
+ snapshot.dispose()
+ }
+ }
+
+ @Test
+ fun cannotApplyAfterADispose() {
+ var state by mutableStateOf("initial")
+ val snapshot = takeMutableSnapshot()
+ try {
+ snapshot.enter { state = "mutated" }
+ snapshot.dispose()
+ snapshot.apply().check()
+ fail("An exception should have been thrown by the apply()")
+ } catch (ise: IllegalStateException) {
+ // Expected exception
+ assertTrue(
+ ise.message?.let {
+ it.contains("Snapshot is not open") &&
+ it.contains("applied=")
+ } == true,
+ "Incorrect message: ${ise.message}"
+ )
+ } finally {
+ snapshot.dispose()
+ }
+ }
+
+ @Test
fun testRecordsAreReusedCorrectly() {
val value = mutableStateOf<Int>(0)
Snapshot.withMutableSnapshot { value.value++ }
diff --git a/compose/ui/ui-tooling-preview/lint-baseline.xml b/compose/ui/ui-tooling-preview/lint-baseline.xml
deleted file mode 100644
index 5a8706a..0000000
--- a/compose/ui/ui-tooling-preview/lint-baseline.xml
+++ /dev/null
@@ -1,13 +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 UiMode"
- errorLine2=" ~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/tooling/preview/UiMode.kt"/>
- </issue>
-
-</issues>
diff --git a/compose/ui/ui-tooling-preview/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/UiMode.kt b/compose/ui/ui-tooling-preview/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/UiMode.kt
index 13e53cb..5ea037f 100644
--- a/compose/ui/ui-tooling-preview/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/UiMode.kt
+++ b/compose/ui/ui-tooling-preview/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/UiMode.kt
@@ -31,11 +31,12 @@
import android.content.res.Configuration.UI_MODE_TYPE_VR_HEADSET
import android.content.res.Configuration.UI_MODE_TYPE_WATCH
import androidx.annotation.IntDef
+import androidx.annotation.RestrictTo
/**
* Annotation of setting uiMode in [Preview].
- * @hide
*/
+@RestrictTo(RestrictTo.Scope.LIBRARY)
@SuppressLint("UniqueConstants") // UI_MODE_NIGHT_UNDEFINED == UI_MODE_TYPE_UNDEFINED
@Retention(AnnotationRetention.SOURCE)
@IntDef(
diff --git a/compose/ui/ui/api/1.5.0-beta01.txt b/compose/ui/ui/api/1.5.0-beta01.txt
index 434d4ce..ad58ecf 100644
--- a/compose/ui/ui/api/1.5.0-beta01.txt
+++ b/compose/ui/ui/api/1.5.0-beta01.txt
@@ -2405,9 +2405,6 @@
method public boolean retainAll(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
}
- public final class TestModifierUpdaterKt {
- }
-
public final class VerticalAlignmentLine extends androidx.compose.ui.layout.AlignmentLine {
ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
}
diff --git a/compose/ui/ui/api/current.ignore b/compose/ui/ui/api/current.ignore
index 7c34c25..af7782e 100644
--- a/compose/ui/ui/api/current.ignore
+++ b/compose/ui/ui/api/current.ignore
@@ -33,5 +33,7 @@
Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter value in androidx.compose.ui.semantics.SemanticsPropertyReceiver.set(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, T value)
+RemovedClass: androidx.compose.ui.layout.TestModifierUpdaterKt:
+ Removed class androidx.compose.ui.layout.TestModifierUpdaterKt
RemovedClass: androidx.compose.ui.platform.AndroidComposeView_androidKt:
Removed class androidx.compose.ui.platform.AndroidComposeView_androidKt
diff --git a/compose/ui/ui/api/current.txt b/compose/ui/ui/api/current.txt
index 434d4ce..ad58ecf 100644
--- a/compose/ui/ui/api/current.txt
+++ b/compose/ui/ui/api/current.txt
@@ -2405,9 +2405,6 @@
method public boolean retainAll(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
}
- public final class TestModifierUpdaterKt {
- }
-
public final class VerticalAlignmentLine extends androidx.compose.ui.layout.AlignmentLine {
ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
}
diff --git a/compose/ui/ui/api/restricted_1.5.0-beta01.txt b/compose/ui/ui/api/restricted_1.5.0-beta01.txt
index f9c6abc..d24ac94 100644
--- a/compose/ui/ui/api/restricted_1.5.0-beta01.txt
+++ b/compose/ui/ui/api/restricted_1.5.0-beta01.txt
@@ -2412,9 +2412,6 @@
method public boolean retainAll(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
}
- public final class TestModifierUpdaterKt {
- }
-
public final class VerticalAlignmentLine extends androidx.compose.ui.layout.AlignmentLine {
ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
}
diff --git a/compose/ui/ui/api/restricted_current.ignore b/compose/ui/ui/api/restricted_current.ignore
index 7c34c25..af7782e 100644
--- a/compose/ui/ui/api/restricted_current.ignore
+++ b/compose/ui/ui/api/restricted_current.ignore
@@ -33,5 +33,7 @@
Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter value in androidx.compose.ui.semantics.SemanticsPropertyReceiver.set(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, T value)
+RemovedClass: androidx.compose.ui.layout.TestModifierUpdaterKt:
+ Removed class androidx.compose.ui.layout.TestModifierUpdaterKt
RemovedClass: androidx.compose.ui.platform.AndroidComposeView_androidKt:
Removed class androidx.compose.ui.platform.AndroidComposeView_androidKt
diff --git a/compose/ui/ui/api/restricted_current.txt b/compose/ui/ui/api/restricted_current.txt
index f9c6abc..d24ac94 100644
--- a/compose/ui/ui/api/restricted_current.txt
+++ b/compose/ui/ui/api/restricted_current.txt
@@ -2412,9 +2412,6 @@
method public boolean retainAll(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
}
- public final class TestModifierUpdaterKt {
- }
-
public final class VerticalAlignmentLine extends androidx.compose.ui.layout.AlignmentLine {
ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
}
diff --git a/compose/ui/ui/build.gradle b/compose/ui/ui/build.gradle
index caff544..501305c 100644
--- a/compose/ui/ui/build.gradle
+++ b/compose/ui/ui/build.gradle
@@ -37,7 +37,7 @@
dependencies {
implementation(libs.kotlinStdlibCommon)
implementation(libs.kotlinCoroutinesCore)
-
+ api("androidx.annotation:annotation:1.6.0")
// when updating the runtime version please also update the runtime-saveable version
implementation(project(":compose:runtime:runtime"))
api(project(":compose:runtime:runtime-saveable"))
@@ -79,7 +79,6 @@
// This has stub APIs for access to legacy Android APIs, so we don't want
// any dependency on this module.
compileOnly(project(":compose:ui:ui-android-stubs"))
- api("androidx.annotation:annotation:1.5.0")
implementation("androidx.autofill:autofill:1.0.0")
implementation(libs.kotlinCoroutinesAndroid)
diff --git a/compose/ui/ui/lint-baseline.xml b/compose/ui/ui/lint-baseline.xml
index 8aebb3a..4d3c0de 100644
--- a/compose/ui/ui/lint-baseline.xml
+++ b/compose/ui/ui/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="BanHideAnnotation"
@@ -11,42 +11,6 @@
</issue>
<issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="class TestModifierUpdater internal constructor(private val node: LayoutNode) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/compose/ui/layout/TestModifierUpdater.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="fun TestModifierUpdaterLayout(onAttached: (TestModifierUpdater) -> Unit) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/compose/ui/layout/TestModifierUpdater.kt"/>
- </issue>
-
- <issue
- id="BanInlineOptIn"
- message="Inline functions cannot opt into experimental APIs."
- errorLine1=" internal inline fun fetchCustomEnter("
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/compose/ui/focus/FocusTargetModifierNode.kt"/>
- </issue>
-
- <issue
- id="BanInlineOptIn"
- message="Inline functions cannot opt into experimental APIs."
- errorLine1=" internal inline fun fetchCustomExit("
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/compose/ui/focus/FocusTargetModifierNode.kt"/>
- </issue>
-
- <issue
id="BanThreadSleep"
message="Uses Thread.sleep()"
errorLine1=" Thread.sleep(sleepTime)"
@@ -67,2598 +31,6 @@
<issue
id="ExperimentalPropertyAnnotation"
message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/androidMain/kotlin/androidx/compose/ui/input/key/Key.android.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
- errorLine1=" @ExperimentalComposeUiApi"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/compose/ui/input/nestedscroll/NestedScrollModifier.kt"/>
- </issue>
-
- <issue
- id="ExperimentalPropertyAnnotation"
- message="This property does not have all required annotations to correctly mark it as experimental."
errorLine1=" @ExperimentalComposeUiApi"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/OnGloballyPositionedTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/OnGloballyPositionedTest.kt
index d0c65cd..e49bbc4a 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/OnGloballyPositionedTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/OnGloballyPositionedTest.kt
@@ -16,12 +16,15 @@
package androidx.compose.ui.layout
+import android.os.SystemClock
+import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.ScrollView
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.size
@@ -53,6 +56,7 @@
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.test.onRoot
import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Popup
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -1051,6 +1055,62 @@
assertFalse(coordindates.isAttached)
}
}
+
+ // In some special circumstances, the onGloballyPositioned callbacks can be called recursively
+ // and they shouldn't crash when that happens. This tests a pointer event causing an
+ // onGloballyPositioned callback while processing the onGloballyPositioned.
+ @Test
+ fun recurseGloballyPositionedCallback() {
+ val view = rule.activity.findViewById<View>(android.R.id.content)
+ var offset by mutableStateOf(IntOffset.Zero)
+ var position = Offset.Unspecified
+ var hasSent = false
+ rule.setContent {
+ Box(Modifier.fillMaxSize()) {
+ Box(Modifier.fillMaxSize().offset { offset }.onGloballyPositioned {
+ if (offset != IntOffset.Zero) {
+ position = it.positionInRoot()
+ }
+ })
+ Box(Modifier.fillMaxSize().offset { offset }.onGloballyPositioned {
+ if (offset != IntOffset.Zero && !hasSent) {
+ hasSent = true
+ val now = SystemClock.uptimeMillis()
+ val event = MotionEvent.obtain(now, now, MotionEvent.ACTION_DOWN, 0f, 0f, 0)
+ view.dispatchTouchEvent(event)
+ }
+ })
+ }
+ }
+ rule.runOnIdle {
+ offset = IntOffset(1, 1)
+ }
+ rule.runOnIdle {
+ assertThat(position).isEqualTo(Offset(1f, 1f))
+ }
+ }
+
+ @Test
+ fun lotsOfNotifications() {
+ // have more than 16 OnGloballyPositioned liseteners to test listener cache
+ var offset by mutableStateOf(IntOffset.Zero)
+ var position = Offset.Unspecified
+ rule.setContent {
+ Box(Modifier.fillMaxSize()) {
+ repeat(30) {
+ Box(Modifier.fillMaxSize().offset { offset }.onGloballyPositioned {
+ position = it.positionInRoot()
+ })
+ }
+ }
+ }
+ rule.runOnIdle {
+ offset = IntOffset(1, 1)
+ }
+ rule.runOnIdle {
+ assertThat(position).isEqualTo(Offset(1f, 1f))
+ }
+ }
}
@Composable
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/TestModifierUpdater.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/TestModifierUpdater.kt
index d065d02..5bda8ad 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/TestModifierUpdater.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/TestModifierUpdater.kt
@@ -16,6 +16,7 @@
package androidx.compose.ui.layout
+import androidx.annotation.RestrictTo
import androidx.compose.runtime.Applier
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ComposeNode
@@ -23,7 +24,7 @@
import androidx.compose.ui.node.ComposeUiNode
import androidx.compose.ui.node.LayoutNode
-/** @hide */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
@Deprecated(
"It is a test API, do not use it in the real applications",
level = DeprecationLevel.ERROR
@@ -35,7 +36,7 @@
}
}
-/** @hide */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
@Deprecated(
"It is a test API, do not use it in the real applications",
level = DeprecationLevel.ERROR
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OnPositionedDispatcher.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OnPositionedDispatcher.kt
index 07b7f50..9642118 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OnPositionedDispatcher.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OnPositionedDispatcher.kt
@@ -24,6 +24,7 @@
*/
internal class OnPositionedDispatcher {
private val layoutNodes = mutableVectorOf<LayoutNode>()
+ private var cachedNodes: Array<LayoutNode?>? = null
fun onNodePositioned(node: LayoutNode) {
layoutNodes += node
@@ -39,12 +40,28 @@
fun dispatch() {
// sort layoutNodes so that the root is at the end and leaves are at the front
layoutNodes.sortWith(DepthComparator)
- layoutNodes.forEachReversed { layoutNode ->
+ val cache: Array<LayoutNode?>
+ val size = layoutNodes.size
+ val cachedNodes = this.cachedNodes
+ if (cachedNodes == null || cachedNodes.size < size) {
+ cache = arrayOfNulls(maxOf(MinArraySize, layoutNodes.size))
+ } else {
+ cache = cachedNodes
+ }
+ this.cachedNodes = null
+
+ // copy to cache to prevent reentrancy being a problem
+ for (i in 0 until size) {
+ cache[i] = layoutNodes[i]
+ }
+ layoutNodes.clear()
+ for (i in size - 1 downTo 0) {
+ val layoutNode = cache[i]!!
if (layoutNode.needsOnPositionedDispatch) {
dispatchHierarchy(layoutNode)
}
}
- layoutNodes.clear()
+ this.cachedNodes = cache
}
private fun dispatchHierarchy(layoutNode: LayoutNode) {
@@ -59,6 +76,8 @@
}
internal companion object {
+ private const val MinArraySize = 16
+
private object DepthComparator : Comparator<LayoutNode> {
override fun compare(a: LayoutNode, b: LayoutNode): Int {
val depthDiff = b.depth.compareTo(a.depth)
diff --git a/core/core/src/androidTest/java/androidx/core/view/DragStartHelperTest.java b/core/core/src/androidTest/java/androidx/core/view/DragStartHelperTest.java
index b32fa94..0dfb788 100644
--- a/core/core/src/androidTest/java/androidx/core/view/DragStartHelperTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/DragStartHelperTest.java
@@ -375,4 +375,23 @@
eq(mDragSource), eq(helper), argThat(new TouchPositionMatcher(0, 0)));
verifyNoMoreInteractions(listener);
}
+
+ @LargeTest
+ @Test
+ public void mouseDragThenLongPress() throws Throwable {
+ final DragStartListener listener = createListener(true);
+ final DragStartHelper helper = createDragStartHelper(listener);
+ helper.attach();
+
+ sendMouseEvent(MotionEvent.ACTION_DOWN, MotionEvent.BUTTON_PRIMARY, mDragSource, 0, 0);
+ sendMouseEvent(MotionEvent.ACTION_MOVE, MotionEvent.BUTTON_PRIMARY, mDragSource, 1, 2);
+
+ verify(listener, times(1)).onDragStart(
+ eq(mDragSource), eq(helper), argThat(new TouchPositionMatcher(mDragSource, 1, 2)));
+
+ waitForLongPress();
+
+ // Long press doesn't triggers OnDragStart for a second time.
+ verifyNoMoreInteractions(listener);
+ }
}
diff --git a/core/core/src/main/java/androidx/core/view/DragStartHelper.java b/core/core/src/main/java/androidx/core/view/DragStartHelper.java
index ed099dc..0c6db11 100644
--- a/core/core/src/main/java/androidx/core/view/DragStartHelper.java
+++ b/core/core/src/main/java/androidx/core/view/DragStartHelper.java
@@ -169,7 +169,12 @@
* @return true if the callback consumed the long click, false otherwise.
*/
public boolean onLongClick(@NonNull View v) {
- return mListener.onDragStart(v, this);
+ if (mDragging) {
+ // Ignore long click once the drag operation is in progress.
+ return true;
+ }
+ mDragging = mListener.onDragStart(v, this);
+ return mDragging;
}
/**
diff --git a/development/build_log_simplifier/messages.ignore b/development/build_log_simplifier/messages.ignore
index 4884c02..5d6fef5 100644
--- a/development/build_log_simplifier/messages.ignore
+++ b/development/build_log_simplifier/messages.ignore
@@ -1017,7 +1017,10 @@
# > Configure project :internal-testutils-ktx
WARNING:.*The option setting 'android\.r8\.maxWorkers=[0-9]+' is experimental\.
# Building XCFrameworks (b/260140834) and iOS benchmark invocation
+Observed package id 'platforms;android-33-ext5' in inconsistent location.*
.*xcodebuild.*
+# > Task :core:core:compileDebugAndroidTestKotlin
+w: file://\$SUPPORT/core/core/src/androidTest/java/androidx/core/util/TypedValueCompatTest\.kt:[0-9]+:[0-9]+ 'scaledDensity: Float' is deprecated\. Deprecated in Java
# > Task :wear:tiles:tiles-material:compileDebugJavaWithJavac
\$SUPPORT/wear/tiles/tiles\-material/src/main/java/androidx/wear/tiles/material/CircularProgressIndicator\.java:[0-9]+: warning: \[deprecation\] Helper in androidx\.wear\.tiles\.material has been deprecated
import static androidx\.wear\.tiles\.material\.Helper\.checkNotNull;
@@ -1047,4 +1050,307 @@
w: file://\$SUPPORT/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionHandlePopupPositionTest\.kt:[0-9]+:[0-9]+ 'getter for windowLayoutParams: EspressoOptional<WindowManager\.LayoutParams!>!' is deprecated\. Deprecated in Java
w: file://\$SUPPORT/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/TextFieldVisualTransformationMagnifierTest\.kt:[0-9]+:[0-9]+ 'RequiresDevice' is deprecated\. Deprecated in Java
# > Task :compose:ui:ui:compileDebugAndroidTestKotlin
-w: file://\$SUPPORT/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupTestUtils\.kt:[0-9]+:[0-9]+ 'getter for windowLayoutParams: EspressoOptional<WindowManager\.LayoutParams!>!' is deprecated\. Deprecated in Java
\ No newline at end of file
+w: file://\$SUPPORT/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupTestUtils\.kt:[0-9]+:[0-9]+ 'getter for windowLayoutParams: EspressoOptional<WindowManager\.LayoutParams!>!' is deprecated\. Deprecated in Java
+# > Task :compose:ui:ui-inspection:dexInspectorRelease
+Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$FakeJavaAnnotationConstructor\$asString\$[0-9]+'s kotlin\.Metadata: null
+Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$Instance's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.framework\.ViewExtensionsKt\$ancestors\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.Java[0-9]+RepeatableContainerLoader\$Cache's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmPropertySignature's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.InspectorNode\$WhenMappings's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KotlinReflectionInternalError's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$findFunctionDescriptor\$allMembers\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.RuntimeTypeMapperKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCallerKt\$createAnnotationInstance\$hashCode\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KMutableProperty[0-9]+Impl\$_setter\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.compose\.AndroidComposeViewWrapper\$Companion's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KParameterImpl\$type\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KClasses\$isSubclassOf\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$Data\$members\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCaller's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.UiToolingDataApi's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_parameters\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.LambdaLocation's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeImpl's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$getComposableNodes\$data\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ModuleByClassLoaderKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmPropertySignature\$JavaField's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$supertypes\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$expand\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KProperty[0-9]+Impl\$Getter's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCaller\$CallMode's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KFunctionImpl\$caller\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldSetter\$BoundInstance's kotlin\.Metadata: null
+Info:
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$Instance's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.ParameterInformation's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.IllegalPropertyDelegateAccessException's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.InlineClassAwareCaller's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KClasses\$defaultType\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.PackageHashesKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_returnType\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$FakeJavaAnnotationConstructor\$asString\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.InlineClassAwareCaller\$BoxUnboxData's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$loadConstantsFromStaticFinal\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KProperty[0-9]+Impl's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$handleGetAllParametersCommand\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.ContextCache's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.RuntimeTypeMapperKt\$signature\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterKind's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$BoundConstructor's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$handleUnknownCommand\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.InlineClassAwareCallerKt's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$ParameterCreator\$findBestResourceFont\$\$inlined\$filterIsInstance\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.InlineClassConverter\$loadTypeMapper\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Getter\$descriptor\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KClasses's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KMutableProperty[0-9]+Impl\$Setter's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CachesKt\$CACHE_FOR_BASE_CLASSIFIERS\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_returnType\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeParameterImpl's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeImpl\$arguments\$[0-9]+\$parameterizedTypeArguments\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KMutableProperty[0-9]+Impl's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterType's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$JvmStaticInObject's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldGetter\$BoundInstance's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.compose\.ComposeExtensionsKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ComputableClassValue's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$loadConstantsFromObjectInstance\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.RecompositionHandler\$MethodKey's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Setter\$descriptor\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_annotations\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$belongsToView\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeImpl\$arguments\$[0-9]+\$[0-9]+\$type\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$typeParameters\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldSetter\$BoundJvmStaticInObject's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.KTypesJvm's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.RecompositionHandler\$Data's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CachesKt\$K_PACKAGE_CACHE\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$supertypes\$[0-9]+\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$MemberBelonginess's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmPropertySignature\$JavaMethodProperty's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KFunctionImpl\$descriptor\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldSetter\$Static's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_parameters\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldGetter\$BoundJvmStaticInObject's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$declaredNonStaticMembers\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$inheritedStaticMembers\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.NodeGroup's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KCallables\$callSuspendBy\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$ParameterCreator\$lookup\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.proto\.ViewExtensionsKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImplKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmPropertySignature\$KotlinProperty's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldGetter\$JvmStaticInObject's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldGetter's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$AccessorForHiddenConstructor's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$inheritedNonStaticMembers\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KProperty[0-9]+Impl\$delegateSource\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.SlotTreeKt\$extractParameterInfo\$\$inlined\$sortedBy\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$data\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$handleGetComposablesCommand\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.WeakClassLoaderBox's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$constructors\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCallerKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_parameters\$[0-9]+\$invoke\$\$inlined\$sortBy\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldSetter\$JvmStaticInObject's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ReflectionObjectRenderer\$renderLambda\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KParameterImpl\$annotations\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.KClassesJvm's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Accessor's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$JavaMethod's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$belongsToView\$[0-9]+\$invoke\$\$inlined\$filterIsInstance\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.ReflectLambdaKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Getter's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ScopedReflectionFactory's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.SlotTreeKt's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$getComposableFromAnchor\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.ExperimentalReflectionOnLambdas's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$parseLayoutInfo\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.RuntimeTypeMapper's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$WhenMappings's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.Parameter's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.util\.AnchorMap's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$Data\$multifileFacade\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCallerKt\$createAnnotationInstance\$toString\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCallerKt\$createAnnotationInstance\$toString\$[0-9]+\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$belongsToView\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.RecompositionHandlerKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KParameterImpl's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ConcurrentHashMapCache's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CacheByClassKt's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.InspectorNode's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.RecompositionHandler's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$annotations\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.ReflectLambdaKt\$reflect\$descriptor\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$BoundInstance's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$Data\$moduleData\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$handleGetParameterDetailsCommand\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ReflectionObjectRenderer's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.proto\.ComposeExtensionsKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeImpl\$arguments\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.compose\.AndroidComposeViewWrapperKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.SourceContext's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$findPropertyDescriptor\$mostVisibleProperties\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$SubCompositionRoots's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$allStaticMembers\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$handleGetParametersCommand\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.EmptyContainerForLocal's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KClassifiers's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.CompositionCallStack's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Companion's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$loadConstantsFrom\$[0-9]+\$topClass\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.InternalUnderlyingValOfInlineClass\$Unbound's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeParameterImpl\$upperBounds\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KAnnotatedElements's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.ParseError's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$CacheTree's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$allMembers\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeImpl\$arguments\$[0-9]+\$WhenMappings's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.Group's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KClasses\$allSupertypes\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassifierImpl's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ReflectionObjectRenderer\$renderFunction\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CachesKt\$K_CLASS_CACHE\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.compose\.AndroidComposeViewWrapper's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$Static's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.FunctionWithAllInvokes's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$BoundJvmStaticInObject's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldGetter\$Static's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.TypeOfImplKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ReflectionObjectRenderer\$WhenMappings's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ReflectionScope's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$Data\$metadata\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.framework\.ViewExtensionsKt\$flatten\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$ParameterCreator\$unwrap\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.FunctionWithAllInvokes\$DefaultImpls's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$Data\$kotlinClass\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$declaredStaticMembers\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$allNonStaticMembers\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KProperty[0-9]+Impl\$delegateValue\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.InternalUnderlyingValOfInlineClass\$Bound's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ReflectionScope\$Companion's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KProperty[0-9]+Impl\$_getter\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CacheByClass's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.NodeParameterReference's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CachesKt\$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.proto\.StringTable's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$getLocalProperty\$[0-9]+\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KClassifiers\$WhenMappings's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$stitchTreesByLayoutInfo\$[0-9]+\$parentLayout\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspectorFactory's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.Caller's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.proto\.StringTable\$put\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.InlineClassConverter's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$convert\$group\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.LambdaLocation\$Companion's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldSetter's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KFunctionImpl\$defaultCaller\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KTypes's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.ReflectJvmMapping's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$loadConstantsFrom\$related\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$getLocalProperty\$[0-9]+\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$data\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.InspectorNodeKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.Java[0-9]+RepeatableContainerLoader's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KCallables\$callSuspend\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.SourceInformationContext's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$BoundStatic's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KCallables's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeParameterImpl\$WhenMappings's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$ParameterCreator's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$simpleName\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.InlineClassConverter\$notInlineType\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.InternalUnderlyingValOfInlineClass's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$handleUpdateSettingsCommand\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.ThrowingCaller's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmPropertySignature\$MappedKotlinProperty's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Constructor's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$getMembers\$visitor\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.util\.IntArrayKt's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTreeKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.KCallablesJvm's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ReflectionScopeKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.JoinedKey's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CachesKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$descriptor\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$stitchTreesByLayoutInfo\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.SourceLocation's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$Data\$scope\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.ReflectJvmMapping\$WhenMappings's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$objectInstance\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CachesKt\$CACHE_FOR_GENERIC_CLASSIFIERS\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$getAndroidComposeViews\$roots\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$CacheData's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.IllegalCallableAccessException's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$declaredMembers\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$JavaConstructor's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.Caller\$DefaultImpls's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.NoSuchPropertyException's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$Data's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KFunctionImpl's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.MutableInspectorNode's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldSetter\$Instance's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactoryKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldGetter\$Instance's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$sealedSubclasses\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$KotlinConstructor's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CreateKCallableVisitor's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCaller\$Origin's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Companion's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$findDeepParentTree\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.UtilKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Getter\$caller\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Setter\$caller\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Setter's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$FakeJavaAnnotationConstructor's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.util\.AnchorMapKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.EmptyGroup's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.BoundCaller's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$WhenMappings's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$Data's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspectorKt's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.QuadBounds's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$JavaConstructor\$asString\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KProperties's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeImpl\$classifier\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$StitchInfo's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ClassValueCache's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$KotlinFunction's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$create\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.SourceLocationInfo's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.CallGroup's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$AccessorForHiddenBoundConstructor's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_typeParameters\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.util\.ThreadUtils's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$nestedClasses\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$supertypes\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.NodeParameter's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$_descriptor\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$findPropertyDescriptor\$allMembers\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$ModifierCollector's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$parseLayoutInfo\$\$inlined\$filterIsInstance\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$_javaField\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.proto\.ComposeExtensionsKt\$WhenMappings's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.RawParameter's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$FakeJavaAnnotationConstructor\$special\$\$inlined\$sortedBy\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeParameterOwnerImpl's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.framework\.ViewExtensionsKt's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.UtilKt\$WhenMappings's kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$Companion's kotlin\.Metadata: null
+Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.compose\.ComposeExtensionsKt\$flatten\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$qualifiedName\$[0-9]+'s kotlin\.Metadata: null
+Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl's kotlin\.Metadata: null
diff --git a/lint-checks/src/main/java/androidx/com/android/tools/idea/lang/aidl/AidlLanguage.java b/lint-checks/src/main/java/androidx/com/android/tools/idea/lang/aidl/AidlLanguage.java
index 0a10e27..3e7d669 100644
--- a/lint-checks/src/main/java/androidx/com/android/tools/idea/lang/aidl/AidlLanguage.java
+++ b/lint-checks/src/main/java/androidx/com/android/tools/idea/lang/aidl/AidlLanguage.java
@@ -22,14 +22,12 @@
* Android IDL Language.
*/
public class AidlLanguage extends Language {
- private static final Object INSTANCE_LOCK = new Object();
-
public static final Language INSTANCE = getOrCreate();
private static Language getOrCreate() {
// The Language class is not thread-safe, so this is a best-effort to avoid a race condition
- // during our own access across multiple lint worker threads.
- synchronized (INSTANCE_LOCK) {
+ // during our own access across multiple lint worker threads and classloaders.
+ synchronized (Language.ANY) {
Language lang = Language.findLanguageByID(ID);
if (lang != null) {
return lang;
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/QueryInterceptorTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/QueryInterceptorTest.kt
index 4f6a445..82a15d5 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/QueryInterceptorTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/QueryInterceptorTest.kt
@@ -82,12 +82,10 @@
ApplicationProvider.getApplicationContext(),
QueryInterceptorTestDatabase::class.java
).setQueryCallback(
- object : RoomDatabase.QueryCallback {
- override fun onQuery(sqlQuery: String, bindArgs: List<Any?>) {
- val argTrace = ArrayList<Any?>()
- argTrace.addAll(bindArgs)
- queryAndArgs.add(Pair(sqlQuery, argTrace))
- }
+ { sqlQuery, bindArgs ->
+ val argTrace = ArrayList<Any?>()
+ argTrace.addAll(bindArgs)
+ queryAndArgs.add(Pair(sqlQuery, argTrace))
},
MoreExecutors.directExecutor()
).build()
@@ -190,12 +188,10 @@
ApplicationProvider.getApplicationContext(),
QueryInterceptorTestDatabase::class.java
).setQueryCallback(
- object : RoomDatabase.QueryCallback {
- override fun onQuery(sqlQuery: String, bindArgs: List<Any?>) {
- val argTrace = ArrayList<Any?>()
- argTrace.addAll(bindArgs)
- queryAndArgs.add(Pair(sqlQuery, argTrace))
- }
+ { sqlQuery, bindArgs ->
+ val argTrace = ArrayList<Any?>()
+ argTrace.addAll(bindArgs)
+ queryAndArgs.add(Pair(sqlQuery, argTrace))
},
MoreExecutors.directExecutor()
)
diff --git a/room/room-runtime/api/current.txt b/room/room-runtime/api/current.txt
index 85a503e..2b171d7 100644
--- a/room/room-runtime/api/current.txt
+++ b/room/room-runtime/api/current.txt
@@ -146,7 +146,7 @@
method public void onOpenPrepackagedDatabase(androidx.sqlite.db.SupportSQLiteDatabase db);
}
- public static interface RoomDatabase.QueryCallback {
+ public static fun interface RoomDatabase.QueryCallback {
method public void onQuery(String sqlQuery, java.util.List<?> bindArgs);
}
diff --git a/room/room-runtime/api/restricted_current.txt b/room/room-runtime/api/restricted_current.txt
index 3c93dee..0d2b10b 100644
--- a/room/room-runtime/api/restricted_current.txt
+++ b/room/room-runtime/api/restricted_current.txt
@@ -201,7 +201,7 @@
method public void onOpenPrepackagedDatabase(androidx.sqlite.db.SupportSQLiteDatabase db);
}
- public static interface RoomDatabase.QueryCallback {
+ public static fun interface RoomDatabase.QueryCallback {
method public void onQuery(String sqlQuery, java.util.List<?> bindArgs);
}
diff --git a/room/room-runtime/src/main/java/androidx/room/RoomDatabase.kt b/room/room-runtime/src/main/java/androidx/room/RoomDatabase.kt
index 6bf5259..bc86569 100644
--- a/room/room-runtime/src/main/java/androidx/room/RoomDatabase.kt
+++ b/room/room-runtime/src/main/java/androidx/room/RoomDatabase.kt
@@ -1526,7 +1526,7 @@
*
* Can be set using [RoomDatabase.Builder.setQueryCallback].
*/
- interface QueryCallback {
+ fun interface QueryCallback {
/**
* Called when a SQL query is executed.
*
diff --git a/settings.gradle b/settings.gradle
index 0f11a3a..f4bbd60 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -453,6 +453,7 @@
includeProject(":autofill:autofill", [BuildType.MAIN])
includeProject(":benchmark:benchmark-benchmark", "benchmark/benchmark", [BuildType.MAIN, BuildType.COMPOSE])
includeProject(":benchmark:benchmark-common")
+includeProject(":benchmark:benchmark-internal")
includeProject(":benchmark:benchmark-darwin", [BuildType.INFRAROGUE, BuildType.KMP])
includeProject(":benchmark:benchmark-darwin-core", [BuildType.INFRAROGUE, BuildType.KMP])
includeProject(":benchmark:benchmark-darwin-samples", [BuildType.INFRAROGUE, BuildType.KMP])
diff --git a/slice/slice-builders-ktx/lint-baseline.xml b/slice/slice-builders-ktx/lint-baseline.xml
deleted file mode 100644
index ba31f50..0000000
--- a/slice/slice-builders-ktx/lint-baseline.xml
+++ /dev/null
@@ -1,13 +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 SliceMarker"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.kt"/>
- </issue>
-
-</issues>
diff --git a/slice/slice-builders-ktx/src/main/java/androidx/slice/builders/ListBuilder.kt b/slice/slice-builders-ktx/src/main/java/androidx/slice/builders/ListBuilder.kt
index 0075e93..101ed21 100644
--- a/slice/slice-builders-ktx/src/main/java/androidx/slice/builders/ListBuilder.kt
+++ b/slice/slice-builders-ktx/src/main/java/androidx/slice/builders/ListBuilder.kt
@@ -23,9 +23,6 @@
import androidx.core.graphics.drawable.IconCompat
import androidx.slice.builders.ListBuilder.ICON_IMAGE
-/**
- * @hide
- */
@RestrictTo(LIBRARY)
@DslMarker
annotation class SliceMarker
diff --git a/slice/slice-builders/lint-baseline.xml b/slice/slice-builders/lint-baseline.xml
index bb7a657..125de78 100644
--- a/slice/slice-builders/lint-baseline.xml
+++ b/slice/slice-builders/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="WrongConstant"
@@ -11,1401 +11,6 @@
</issue>
<issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction getPrimaryAction() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public List<CellBuilder> getCells() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CellBuilder getSeeMoreCell() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public PendingIntent getSeeMoreIntent() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getDescription() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getLayoutDirection() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int TYPE_TEXT = 0;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int TYPE_TITLE = 1;"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int TYPE_IMAGE = 2;"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int TYPE_OVERLAY = 3;"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public List<Object> getObjects() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public List<Integer> getTypes() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public List<Boolean> getLoadings() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getCellDescription() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public PendingIntent getContentIntent() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getTitle() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getSubtitle() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction getSliceAction() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/GridRowBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class GridRowBuilderListV1Impl extends TemplateBuilderImpl {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/GridRowBuilderListV1Impl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void apply(@NonNull Slice.Builder b) {"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/GridRowBuilderListV1Impl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public interface ListBuilder {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @interface ImageMode {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @interface LayoutDirection {}"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected TemplateBuilderImpl selectImpl() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public androidx.slice.builders.impl.ListBuilder getImpl() {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @interface RangeMode {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isTitleItemLoading() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getTitleImageMode() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public IconCompat getTitleIcon() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getValue() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getMax() {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isValueSet() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getTitle() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getSubtitle() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction getPrimaryAction() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getContentDescription() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getLayoutDirection() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getMode() {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int TYPE_ACTION = 2;"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getMin() {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getMax() {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public float getValue() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isValueSet() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public PendingIntent getAction() {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getContentDescription() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public PendingIntent getInputAction() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getTitle() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getSubtitle() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction getPrimaryAction() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isTitleItemLoading() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getTitleImageMode() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public IconCompat getTitleIcon() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isTitleItemLoading() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getTitleImageMode() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public IconCompat getTitleIcon() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int TYPE_ACTION = 2;"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public List<Object> getEndItems() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public List<Integer> getEndTypes() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public List<Boolean> getEndLoads() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getMin() {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getMax() {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getValue() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isValueSet() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getTitle() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getSubtitle() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public PendingIntent getAction() {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public PendingIntent getInputAction() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public IconCompat getThumb() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction getPrimaryAction() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getContentDescription() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getLayoutDirection() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int TYPE_TIMESTAMP = 0;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int TYPE_ICON = 1;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int TYPE_ACTION = 2;"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Uri getUri() {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isEndOfSection() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean hasEndActionOrToggle() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean hasEndImage() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean hasDefaultToggle() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean hasTimestamp() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public long getTimeStamp() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isTitleItemLoading() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getTitleImageMode() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public IconCompat getTitleIcon() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction getTitleAction() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction getPrimaryAction() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getTitle() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isTitleLoading() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getSubtitle() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isSubtitleLoading() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getContentDescription() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getLayoutDirection() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public List<Object> getEndItems() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public List<Integer> getEndTypes() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public List<Boolean> getEndLoads() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isTitleActionLoading() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public HeaderBuilder(@NonNull final Uri uri) {"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Uri getUri() {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getTitle() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isTitleLoading() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getSubtitle() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isSubtitleLoading() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getSummary() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isSummaryLoading() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction getPrimaryAction() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getContentDescription() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getLayoutDirection() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/ListBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class ListBuilderBasicImpl extends TemplateBuilderImpl implements ListBuilder {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/ListBuilderBasicImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class ListBuilderImpl extends TemplateBuilderImpl implements ListBuilder {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/ListBuilderImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class MessagingBasicImpl extends TemplateBuilderImpl implements"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/MessagingBasicImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public interface MessagingBuilder {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/MessagingBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class MessagingListV1Impl extends TemplateBuilderImpl implements MessagingBuilder{"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/MessagingListV1Impl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class MessagingSliceBuilder extends TemplateSliceBuilder {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/MessagingSliceBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected TemplateBuilderImpl selectImpl() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/MessagingSliceBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class MessagingV1Impl extends TemplateBuilderImpl implements MessagingBuilder {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/MessagingV1Impl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public List<Pair<String, CharSequence>> getOptions() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SelectionBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction getPrimaryAction() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SelectionBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public PendingIntent getInputAction() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SelectionBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public String getSelectedOption() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SelectionBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getTitle() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SelectionBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getSubtitle() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SelectionBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getContentDescription() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SelectionBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getLayoutDirection() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SelectionBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void check() {"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SelectionBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SelectionBuilderBasicImpl extends SelectionBuilderImpl {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/SelectionBuilderBasicImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public abstract class SelectionBuilderImpl extends TemplateBuilderImpl {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/SelectionBuilderImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SelectionBuilderListV2Impl extends SelectionBuilderImpl {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/SelectionBuilderListV2Impl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction(@NonNull PendingIntent action, @NonNull Icon actionIcon,"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction(@NonNull PendingIntent action, @NonNull Icon actionIcon,"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction(@NonNull PendingIntent action, @NonNull Icon actionIcon,"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction(@NonNull PendingIntent action, @NonNull CharSequence actionTitle,"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction(@NonNull PendingIntent action, @NonNull CharSequence actionTitle,"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static SliceAction createDatePicker(@NonNull PendingIntent action,"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static SliceAction createTimePicker(@NonNull PendingIntent action,"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Slice buildSlice(@NonNull Slice.Builder builder) {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceActionImpl getImpl() {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setPrimaryAction(@NonNull Slice.Builder builder) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/SliceAction.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public abstract class TemplateBuilderImpl {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/TemplateBuilderImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Slice.Builder getBuilder() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/TemplateBuilderImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Slice.Builder createChildBuilder() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/TemplateBuilderImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public abstract void apply(@NonNull Slice.Builder builder);"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/TemplateBuilderImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Clock getClock() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/TemplateBuilderImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceSpec getSpec() {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/TemplateBuilderImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected ArrayList<String> parseImageMode(int imageMode, boolean isLoading) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/impl/TemplateBuilderImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected TemplateSliceBuilder(TemplateBuilderImpl impl) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/TemplateSliceBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public TemplateSliceBuilder(Context context, Uri uri) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/TemplateSliceBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected Slice.Builder getBuilder() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/TemplateSliceBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" abstract void setImpl(TemplateBuilderImpl impl);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/TemplateSliceBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected TemplateBuilderImpl selectImpl() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/TemplateSliceBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected boolean checkCompatible(SliceSpec candidate) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/TemplateSliceBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected Clock getClock() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/builders/TemplateSliceBuilder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" static <T> Pair<SliceSpec, Class<? extends TemplateBuilderImpl>> pair(SliceSpec spec,"
- errorLine2=" ~~~~">
- <location
- file="src/main/java/androidx/slice/builders/TemplateSliceBuilder.java"/>
- </issue>
-
- <issue
id="ClassVerificationFailure"
message="This call references a method added in API level 26; however, the containing class androidx.slice.builders.impl.ListBuilderBasicImpl is reachable from earlier API levels and will fail run-time class verification."
errorLine1=" setTtl(ttl == null ? INFINITY : ttl.toMillis());"
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/GridRowBuilder.java b/slice/slice-builders/src/main/java/androidx/slice/builders/GridRowBuilder.java
index 4e8de26..4523685 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/GridRowBuilder.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/GridRowBuilder.java
@@ -184,7 +184,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public SliceAction getPrimaryAction() {
@@ -192,7 +191,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public List<CellBuilder> getCells() {
@@ -200,7 +198,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public CellBuilder getSeeMoreCell() {
@@ -208,7 +205,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public PendingIntent getSeeMoreIntent() {
@@ -216,7 +212,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public CharSequence getDescription() {
@@ -224,7 +219,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getLayoutDirection() {
@@ -265,22 +259,18 @@
*/
public static class CellBuilder {
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public static final int TYPE_TEXT = 0;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public static final int TYPE_TITLE = 1;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public static final int TYPE_IMAGE = 2;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public static final int TYPE_OVERLAY = 3;
@@ -465,7 +455,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public List<Object> getObjects() {
@@ -473,7 +462,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public List<Integer> getTypes() {
@@ -481,7 +469,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public List<Boolean> getLoadings() {
@@ -489,7 +476,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public CharSequence getCellDescription() {
@@ -497,7 +483,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public PendingIntent getContentIntent() {
@@ -505,7 +490,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -519,7 +503,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -533,7 +516,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/ListBuilder.java b/slice/slice-builders/src/main/java/androidx/slice/builders/ListBuilder.java
index b532dfe..77d5f5b 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/ListBuilder.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/ListBuilder.java
@@ -180,7 +180,6 @@
public static final int UNKNOWN_IMAGE = SliceHints.UNKNOWN_IMAGE;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@IntDef({
@@ -197,7 +196,6 @@
public static final long INFINITY = SliceHints.INFINITY;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@IntDef({
@@ -494,7 +492,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Override
@@ -511,7 +508,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@NonNull
@@ -520,7 +516,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@IntDef({
@@ -727,7 +722,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isTitleItemLoading() {
@@ -735,7 +729,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getTitleImageMode() {
@@ -743,7 +736,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -752,7 +744,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getValue() {
@@ -760,7 +751,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getMax() {
@@ -768,7 +758,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isValueSet() {
@@ -776,7 +765,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -785,7 +773,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -794,7 +781,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -803,7 +789,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -812,7 +797,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getLayoutDirection() {
@@ -820,7 +804,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getMode() {
@@ -838,7 +821,6 @@
@SuppressLint("MissingBuildMethod")
public static final class RatingBuilder {
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public static final int TYPE_ACTION = 2;
@@ -867,7 +849,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getMin() {
@@ -884,7 +865,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getMax() {
@@ -901,7 +881,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public float getValue() {
@@ -922,7 +901,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isValueSet() {
@@ -930,7 +908,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -939,7 +916,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1029,7 +1005,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1058,7 +1033,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1067,7 +1041,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1076,7 +1049,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1085,7 +1057,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isTitleItemLoading() {
@@ -1093,7 +1064,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getTitleImageMode() {
@@ -1101,7 +1071,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1338,7 +1307,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isTitleItemLoading() {
@@ -1346,7 +1314,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getTitleImageMode() {
@@ -1354,7 +1321,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1363,13 +1329,11 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public static final int TYPE_ACTION = 2;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@NonNull
@@ -1378,7 +1342,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@NonNull
@@ -1387,7 +1350,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@NonNull
@@ -1396,7 +1358,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getMin() {
@@ -1404,7 +1365,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getMax() {
@@ -1412,7 +1372,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getValue() {
@@ -1420,7 +1379,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isValueSet() {
@@ -1428,7 +1386,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1437,7 +1394,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1446,7 +1402,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1455,7 +1410,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1464,7 +1418,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1473,7 +1426,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1482,7 +1434,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1491,7 +1442,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getLayoutDirection() {
@@ -1558,17 +1508,14 @@
private boolean mTitleActionLoading;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public static final int TYPE_TIMESTAMP = 0;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public static final int TYPE_ICON = 1;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public static final int TYPE_ACTION = 2;
@@ -1873,7 +1820,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1882,7 +1828,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isEndOfSection() {
@@ -1890,7 +1835,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean hasEndActionOrToggle() {
@@ -1898,7 +1842,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean hasEndImage() {
@@ -1906,7 +1849,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean hasDefaultToggle() {
@@ -1914,7 +1856,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean hasTimestamp() {
@@ -1922,7 +1863,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public long getTimeStamp() {
@@ -1930,7 +1870,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isTitleItemLoading() {
@@ -1938,7 +1877,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getTitleImageMode() {
@@ -1946,7 +1884,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1955,7 +1892,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1964,7 +1900,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1973,7 +1908,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1982,7 +1916,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isTitleLoading() {
@@ -1990,7 +1923,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -1999,7 +1931,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isSubtitleLoading() {
@@ -2007,7 +1938,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -2016,7 +1946,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getLayoutDirection() {
@@ -2024,7 +1953,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@NonNull
@@ -2033,7 +1961,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@NonNull
@@ -2042,7 +1969,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@NonNull
@@ -2051,7 +1977,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isTitleActionLoading() {
@@ -2103,7 +2028,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
public HeaderBuilder(@NonNull final Uri uri) {
@@ -2227,7 +2151,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -2236,7 +2159,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -2245,7 +2167,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isTitleLoading() {
@@ -2253,7 +2174,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -2262,7 +2182,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isSubtitleLoading() {
@@ -2270,7 +2189,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -2279,7 +2197,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public boolean isSummaryLoading() {
@@ -2287,7 +2204,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -2296,7 +2212,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Nullable
@@ -2305,7 +2220,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getLayoutDirection() {
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/MessagingSliceBuilder.java b/slice/slice-builders/src/main/java/androidx/slice/builders/MessagingSliceBuilder.java
index e91c43f..4041d50 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/MessagingSliceBuilder.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/MessagingSliceBuilder.java
@@ -38,7 +38,6 @@
/**
* Builder to construct slice content in a messaging format.
- * @hide
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@RequiresApi(19)
@@ -83,7 +82,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Override
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/SelectionBuilder.java b/slice/slice-builders/src/main/java/androidx/slice/builders/SelectionBuilder.java
index be06a6b..4e5550a 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/SelectionBuilder.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/SelectionBuilder.java
@@ -180,7 +180,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public List<Pair<String, CharSequence>> getOptions() {
@@ -188,7 +187,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public SliceAction getPrimaryAction() {
@@ -196,7 +194,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public PendingIntent getInputAction() {
@@ -204,7 +201,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public String getSelectedOption() {
@@ -212,7 +208,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public CharSequence getTitle() {
@@ -220,7 +215,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public CharSequence getSubtitle() {
@@ -228,7 +222,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public CharSequence getContentDescription() {
@@ -236,7 +229,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public int getLayoutDirection() {
@@ -244,7 +236,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public void check() {
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/SliceAction.java b/slice/slice-builders/src/main/java/androidx/slice/builders/SliceAction.java
index 0109be7..64263dd 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/SliceAction.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/SliceAction.java
@@ -43,7 +43,6 @@
private final SliceActionImpl mSliceAction;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(23)
@@ -53,7 +52,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(23)
@@ -63,7 +61,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(23)
@@ -79,7 +76,6 @@
* @param actionIcon the icon to display for this action.
* @param actionTitle the title for this action, also used for content description if one hasn't
* been set via {@link #setContentDescription(CharSequence)}.
- * @hide
*/
@RestrictTo(LIBRARY)
public SliceAction(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@@ -103,7 +99,6 @@
* @see ListBuilder#ICON_IMAGE
* @see ListBuilder#SMALL_IMAGE
* @see ListBuilder#LARGE_IMAGE
- * @hide
*/
@RestrictTo(LIBRARY_GROUP)
public SliceAction(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@@ -120,7 +115,6 @@
* @param actionTitle the title for this toggle, also used for content description if one hasn't
* been set via {@link #setContentDescription(CharSequence)}.
* @param isChecked the state of the toggle.
- * @hide
*/
@RestrictTo(LIBRARY_GROUP)
public SliceAction(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@@ -135,7 +129,6 @@
* @param actionTitle the title for this toggle, also used for content description if one hasn't
* been set via {@link #setContentDescription(CharSequence)}.
* @param isChecked the state of the toggle.
- * @hide
*/
@RestrictTo(LIBRARY_GROUP)
public SliceAction(@NonNull PendingIntent action, @NonNull CharSequence actionTitle,
@@ -150,7 +143,6 @@
* @param actionTitle the timestamp for this date or time picker.
* @param dateTimeMillis the default state of the date or time picker.
* @param isDatePicker if it is a date picker, as opposed to a time picker.
- * @hide
*/
@RestrictTo(LIBRARY_GROUP)
public SliceAction(@NonNull PendingIntent action, @NonNull CharSequence actionTitle,
@@ -203,8 +195,8 @@
* @param action the pending intent to invoke for this picker.
* @param actionTitle the timestamp title for this picker.
* @param dateTimeMillis the default state of the date picker.
- * @hide
*/
+ @RestrictTo(LIBRARY)
@NonNull
public static SliceAction createDatePicker(@NonNull PendingIntent action,
@NonNull CharSequence actionTitle, long dateTimeMillis) {
@@ -218,8 +210,8 @@
* @param action the pending intent to invoke for this picker.
* @param actionTitle the timestamp title for this picker.
* @param dateTimeMillis the default state of the time picker.
- * @hide
*/
+ @RestrictTo(LIBRARY)
@NonNull
public static SliceAction createTimePicker(@NonNull PendingIntent action,
@NonNull CharSequence actionTitle, long dateTimeMillis) {
@@ -465,7 +457,6 @@
* @param builder this should be a new builder that has any additional hints the action might
* need.
* @return the slice representation of this action.
- * @hide
*/
@RestrictTo(LIBRARY)
@NonNull
@@ -474,7 +465,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@NonNull
@@ -484,7 +474,6 @@
/**
* @param builder the parent slice builder that contains the primary action.
- * @hide
*/
@RestrictTo(LIBRARY)
public void setPrimaryAction(@NonNull Slice.Builder builder) {
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/TemplateSliceBuilder.java b/slice/slice-builders/src/main/java/androidx/slice/builders/TemplateSliceBuilder.java
index 12d7b07..07accb6 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/TemplateSliceBuilder.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/TemplateSliceBuilder.java
@@ -51,7 +51,6 @@
private List<SliceSpec> mSpecs;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
protected TemplateSliceBuilder(TemplateBuilderImpl impl) {
@@ -62,7 +61,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public TemplateSliceBuilder(Context context, Uri uri) {
@@ -85,7 +83,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
protected Slice.Builder getBuilder() {
@@ -93,13 +90,11 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
abstract void setImpl(TemplateBuilderImpl impl);
/**
- * @hide
*/
@RestrictTo(LIBRARY)
protected TemplateBuilderImpl selectImpl() {
@@ -107,7 +102,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
protected boolean checkCompatible(SliceSpec candidate) {
@@ -129,7 +123,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
protected Clock getClock() {
@@ -141,7 +134,6 @@
/**
* This is for typing, to clean up the code.
- * @hide
*/
@RestrictTo(LIBRARY)
@SuppressWarnings("unchecked")
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/GridRowBuilderListV1Impl.java b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/GridRowBuilderListV1Impl.java
index 184cd4e..ec399bc 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/GridRowBuilderListV1Impl.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/GridRowBuilderListV1Impl.java
@@ -42,7 +42,6 @@
import java.util.List;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(19)
@@ -229,7 +228,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@Override
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/ListBuilder.java b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/ListBuilder.java
index de5bf68..8718ac9 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/ListBuilder.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/ListBuilder.java
@@ -39,7 +39,6 @@
import java.util.Set;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/ListBuilderBasicImpl.java b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/ListBuilderBasicImpl.java
index c137500..faf5588 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/ListBuilderBasicImpl.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/ListBuilderBasicImpl.java
@@ -57,7 +57,6 @@
import java.util.Set;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/ListBuilderImpl.java b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/ListBuilderImpl.java
index 1c34c39..111bd0b 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/ListBuilderImpl.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/ListBuilderImpl.java
@@ -82,7 +82,6 @@
import java.util.Set;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingBasicImpl.java b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingBasicImpl.java
index cb5d540..239e6fb 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingBasicImpl.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingBasicImpl.java
@@ -34,7 +34,6 @@
import androidx.slice.SliceSpec;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingBuilder.java b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingBuilder.java
index 4285eae..03f48ce 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingBuilder.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingBuilder.java
@@ -24,7 +24,6 @@
import androidx.annotation.RestrictTo;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingListV1Impl.java b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingListV1Impl.java
index 93f5989..8dacf8f 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingListV1Impl.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingListV1Impl.java
@@ -30,7 +30,6 @@
import androidx.slice.SliceSpec;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingV1Impl.java b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingV1Impl.java
index 25cfecb..d913d79 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingV1Impl.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/MessagingV1Impl.java
@@ -28,7 +28,6 @@
import androidx.slice.SliceSpec;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/SelectionBuilderBasicImpl.java b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/SelectionBuilderBasicImpl.java
index 1def00e..1c341f1 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/SelectionBuilderBasicImpl.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/SelectionBuilderBasicImpl.java
@@ -30,7 +30,6 @@
import androidx.slice.builders.SelectionBuilder;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/SelectionBuilderImpl.java b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/SelectionBuilderImpl.java
index 5143668..f25d0a6 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/SelectionBuilderImpl.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/SelectionBuilderImpl.java
@@ -25,7 +25,6 @@
import androidx.slice.builders.SelectionBuilder;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/SelectionBuilderListV2Impl.java b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/SelectionBuilderListV2Impl.java
index af4d92e..0c25ad0 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/SelectionBuilderListV2Impl.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/SelectionBuilderListV2Impl.java
@@ -38,7 +38,6 @@
import java.util.List;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/TemplateBuilderImpl.java b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/TemplateBuilderImpl.java
index 9a377d2..8cb26f66 100644
--- a/slice/slice-builders/src/main/java/androidx/slice/builders/impl/TemplateBuilderImpl.java
+++ b/slice/slice-builders/src/main/java/androidx/slice/builders/impl/TemplateBuilderImpl.java
@@ -40,7 +40,6 @@
import java.util.ArrayList;
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@RequiresApi(19)
@@ -74,7 +73,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public Slice.Builder getBuilder() {
@@ -82,7 +80,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public Slice.Builder createChildBuilder() {
@@ -90,13 +87,11 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public abstract void apply(@NonNull Slice.Builder builder);
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public Clock getClock() {
@@ -104,7 +99,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public SliceSpec getSpec() {
@@ -112,7 +106,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@NonNull
diff --git a/slice/slice-core/lint-baseline.xml b/slice/slice-core/lint-baseline.xml
index 528ca08..f6b771e 100644
--- a/slice/slice-core/lint-baseline.xml
+++ b/slice/slice-core/lint-baseline.xml
@@ -1,680 +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">
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="class ArrayUtils {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/ArrayUtils.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public interface Clock {"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/slice/Clock.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class CompatPermissionManager {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class CompatPinnedList {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class CornerDrawable extends InsetDrawable {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/CornerDrawable.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final String SUBTYPE_RANGE_MODE = "range_mode";"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @interface SliceHint { }"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" Slice(ArrayList<SliceItem> items, @SliceHint String[] hints, Uri uri,"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Slice() {"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Slice(@NonNull Bundle in) {"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @NonNull Bundle toBundle() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @Nullable SliceSpec getSpec() {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @NonNull SliceItem[] getItemArray() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @NonNull @SliceHint String[] getHintArray() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean hasHint(@NonNull @SliceHint String hint) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void onPreParceling(boolean isStream) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void onPostParceling() {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static class Builder {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @NonNull Builder setSpec(@Nullable SliceSpec spec) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @NonNull Builder addRemoteInput(@NonNull RemoteInput remoteInput,"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @NonNull Builder addRemoteInput(@NonNull RemoteInput remoteInput,"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @NonNull Builder addItem(@NonNull SliceItem item) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public String toString(@NonNull String indent) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static void appendHints(@NonNull StringBuilder sb, @Nullable String[] hints) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static Slice bindSlice(@NonNull Context context, @NonNull Uri uri,"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" static boolean isValidIcon(IconCompat icon) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/Slice.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SliceActionImpl implements SliceAction {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceActionImpl(@NonNull PendingIntent action, @NonNull CharSequence actionTitle,"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceActionImpl(@NonNull SliceItem slice) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceItem getActionItem() {"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static int parseImageMode(@NonNull SliceItem iconItem) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static Set<androidx.slice.SliceSpec> wrap("
- errorLine2=" ~~~~">
- <location
- file="src/main/java/androidx/slice/SliceConvert.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SliceHints {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/core/SliceHints.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @interface SliceType {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" @Slice.SliceHint String[] mHints = Slice.NO_HINTS;"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceItem(Object obj, @NonNull @SliceType String format, @Nullable String subType,"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceItem(Object obj, @NonNull @SliceType String format, @Nullable String subType,"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceItem() {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceItem(@NonNull PendingIntent intent, @Nullable Slice slice,"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceItem(@NonNull ActionHandler action, @Nullable Slice slice,"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @NonNull @Slice.SliceHint String[] getHintArray() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void addHint(@Slice.SliceHint @NonNull String hint) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getSanitizedText() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean fireActionInternal(@Nullable Context context, @Nullable Intent i)"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public RemoteInput getRemoteInput() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceItem(@NonNull Bundle in) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Bundle toBundle() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean hasHints(@Nullable @Slice.SliceHint String[] hints) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean hasAnyHints(@Nullable @Slice.SliceHint String... hints) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static String typeToString(@NonNull String format) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public String toString(@NonNull String indent) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public interface ActionHandler {"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItem.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SliceItemHolder implements VersionedParcelable {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceItemHolder.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" SliceManager() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceManager.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public abstract @NonNull Set<SliceSpec> getPinnedSpecs(@NonNull Uri uri);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceManager.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="class SliceManagerCompat extends SliceManager {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceManagerCompat.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="class SliceManagerWrapper extends SliceManager {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceManagerWrapper.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SlicePermissionActivity extends AppCompatActivity implements OnClickListener,"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/compat/SlicePermissionActivity.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Object getWrapper() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceProvider.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected CompatPermissionManager onCreatePermissionManager("
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceProvider.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Slice createPermissionSlice(@NonNull Uri sliceUri,"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceProvider.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void handleSlicePinned(@NonNull Uri sliceUri) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceProvider.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void handleSliceUnpinned(@NonNull Uri sliceUri) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceProvider.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void validateIncomingAuthority(@Nullable String authority) throws SecurityException {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceProvider.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static void setSpecs(@Nullable Set<SliceSpec> specs) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceProvider.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static Set<SliceSpec> getCurrentSpecs() {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceProvider.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static void setClock(@Nullable Clock clock) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceProvider.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static Clock getClock() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceProvider.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SliceProviderCompat {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/compat/SliceProviderCompat.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SliceProviderWrapperContainer {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SliceQuery {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public final class SliceSpec implements VersionedParcelable {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceSpec.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceSpec() {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceSpec.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SliceSpecs {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceSpecs.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SystemClock implements Clock {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SystemClock.java"/>
- </issue>
+<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="BanUncheckedReflection"
diff --git a/slice/slice-core/src/main/java/androidx/slice/ArrayUtils.java b/slice/slice-core/src/main/java/androidx/slice/ArrayUtils.java
index a020ad3..e5dd970 100644
--- a/slice/slice-core/src/main/java/androidx/slice/ArrayUtils.java
+++ b/slice/slice-core/src/main/java/androidx/slice/ArrayUtils.java
@@ -24,7 +24,6 @@
import java.lang.reflect.Array;
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@RequiresApi(19)
diff --git a/slice/slice-core/src/main/java/androidx/slice/Clock.java b/slice/slice-core/src/main/java/androidx/slice/Clock.java
index a1b758e..f68560c 100644
--- a/slice/slice-core/src/main/java/androidx/slice/Clock.java
+++ b/slice/slice-core/src/main/java/androidx/slice/Clock.java
@@ -22,7 +22,6 @@
import androidx.annotation.RestrictTo;
/**
- * @hide
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@RequiresApi(19)
diff --git a/slice/slice-core/src/main/java/androidx/slice/CornerDrawable.java b/slice/slice-core/src/main/java/androidx/slice/CornerDrawable.java
index 5afbe40..9ccb915 100644
--- a/slice/slice-core/src/main/java/androidx/slice/CornerDrawable.java
+++ b/slice/slice-core/src/main/java/androidx/slice/CornerDrawable.java
@@ -30,7 +30,6 @@
* A wrapper for Drawables that uses a path to add mask for corners around the drawable,
* to match the radius of the underlying shape.
*
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class CornerDrawable extends InsetDrawable {
diff --git a/slice/slice-core/src/main/java/androidx/slice/Slice.java b/slice/slice-core/src/main/java/androidx/slice/Slice.java
index d7cf29b..8044c1e 100644
--- a/slice/slice-core/src/main/java/androidx/slice/Slice.java
+++ b/slice/slice-core/src/main/java/androidx/slice/Slice.java
@@ -51,7 +51,6 @@
import static androidx.slice.core.SliceHints.HINT_SELECTION_OPTION;
import static androidx.slice.core.SliceHints.HINT_SHOW_LABEL;
-import android.annotation.SuppressLint;
import android.app.PendingIntent;
import android.app.RemoteInput;
import android.app.slice.SliceManager;
@@ -105,7 +104,6 @@
* Subtype to tag an item as representing the progress bar mode for a
* {@link android.app.slice.Slice#SUBTYPE_RANGE}
*
- * @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
public static final String SUBTYPE_RANGE_MODE = "range_mode";
@@ -120,7 +118,6 @@
static final SliceItem[] NO_ITEMS = new SliceItem[0];
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY)
@StringDef({
@@ -164,7 +161,6 @@
String mUri = null;
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY)
Slice(ArrayList<SliceItem> items, @SliceHint String[] hints, Uri uri,
@@ -177,14 +173,12 @@
/**
* Used for VersionedParcelable
- * @hide
*/
@RestrictTo(Scope.LIBRARY)
public Slice() {
}
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY)
@SuppressWarnings("deprecation")
@@ -204,7 +198,6 @@
}
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY)
public @NonNull Bundle toBundle() {
@@ -225,7 +218,6 @@
/**
* @return The spec for this slice
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public @Nullable SliceSpec getSpec() {
@@ -247,7 +239,6 @@
}
/**
- * @hide
* @return
*/
@RestrictTo(LIBRARY)
@@ -263,7 +254,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public @NonNull @SliceHint String[] getHintArray() {
@@ -271,7 +261,6 @@
}
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP_PREFIX)
public boolean hasHint(@NonNull @SliceHint String hint) {
@@ -279,7 +268,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@Override
@@ -287,7 +275,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@Override
@@ -304,7 +291,6 @@
/**
* A Builder used to construct {@link Slice}s
- * @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP_PREFIX)
public static class Builder {
@@ -339,7 +325,6 @@
/**
* Add the spec for this slice.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public @NonNull Builder setSpec(@Nullable SliceSpec spec) {
@@ -462,7 +447,6 @@
* Add remote input to the slice being constructed
* @param subType Optional template-specific type information
* @see SliceItem#getSubType()
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public @NonNull Builder addRemoteInput(@NonNull RemoteInput remoteInput,
@@ -475,7 +459,6 @@
* Add remote input to the slice being constructed
* @param subType Optional template-specific type information
* @see SliceItem#getSubType()
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public @NonNull Builder addRemoteInput(@NonNull RemoteInput remoteInput,
@@ -553,7 +536,6 @@
/**
* Add a SliceItem to the slice being constructed.
- * @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
public @NonNull Builder addItem(@NonNull SliceItem item) {
@@ -580,7 +562,6 @@
/**
* @return A string representation of this slice.
- * @hide
*/
@NonNull
@RestrictTo(Scope.LIBRARY)
@@ -606,7 +587,6 @@
}
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY)
public static void appendHints(@NonNull StringBuilder sb, @Nullable String[] hints) {
@@ -628,7 +608,6 @@
* @param context Context to be used.
* @param uri The URI to a slice provider
* @return The Slice provided by the app or null if none is given.
- * @hide
* @see Slice
*/
@RestrictTo(Scope.LIBRARY_GROUP_PREFIX)
@@ -651,7 +630,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
static boolean isValidIcon(IconCompat icon) {
diff --git a/slice/slice-core/src/main/java/androidx/slice/SliceConvert.java b/slice/slice-core/src/main/java/androidx/slice/SliceConvert.java
index 71e9c23..3711e65 100644
--- a/slice/slice-core/src/main/java/androidx/slice/SliceConvert.java
+++ b/slice/slice-core/src/main/java/androidx/slice/SliceConvert.java
@@ -169,7 +169,6 @@
}
/**
- * @hide
*/
@NonNull
@RestrictTo(RestrictTo.Scope.LIBRARY)
diff --git a/slice/slice-core/src/main/java/androidx/slice/SliceItem.java b/slice/slice-core/src/main/java/androidx/slice/SliceItem.java
index f9e12a3..c35fdef 100644
--- a/slice/slice-core/src/main/java/androidx/slice/SliceItem.java
+++ b/slice/slice-core/src/main/java/androidx/slice/SliceItem.java
@@ -100,7 +100,6 @@
private static final String SLICE_CONTENT_SENSITIVE = "sensitive";
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY)
@StringDef({FORMAT_SLICE, FORMAT_TEXT, FORMAT_IMAGE, FORMAT_ACTION, FORMAT_INT,
@@ -110,7 +109,6 @@
}
/**
- * @hide
*/
@NonNull
@RestrictTo(Scope.LIBRARY)
@@ -137,7 +135,6 @@
SliceItemHolder mHolder;
/**
- * @hide
*/
@SuppressWarnings("NullableProblems")
@SuppressLint("UnknownNullness") // obj cannot be correctly annotated
@@ -151,7 +148,6 @@
}
/**
- * @hide
*/
@SuppressLint("UnknownNullness") // obj cannot be correctly annotated
@RestrictTo(Scope.LIBRARY_GROUP)
@@ -162,14 +158,12 @@
/**
* Used by VersionedParcelable.
- * @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
public SliceItem() {
}
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
public SliceItem(@NonNull PendingIntent intent, @Nullable Slice slice,
@@ -179,7 +173,6 @@
}
/**
- * @hide
*/
@SuppressLint("LambdaLast")
@RestrictTo(Scope.LIBRARY_GROUP)
@@ -199,7 +192,6 @@
}
/**
- * @hide
*/
@SuppressWarnings("unused")
@RestrictTo(Scope.LIBRARY)
@@ -208,7 +200,6 @@
}
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
public void addHint(@Slice.SliceHint @NonNull String hint) {
@@ -258,7 +249,6 @@
}
/**
- * @hide
* @return The text held by this {@link android.app.slice.SliceItem#FORMAT_TEXT} SliceItem with
* ony spans that are unsupported by the androidx Slice renderer removed.
*/
@@ -314,7 +304,6 @@
}
/**
- * @hide
*/
@SuppressWarnings("unchecked")
@RestrictTo(Scope.LIBRARY_GROUP_PREFIX)
@@ -334,7 +323,6 @@
/**
* @return The remote input held by this {@link android.app.slice.SliceItem#FORMAT_REMOTE_INPUT}
* SliceItem
- * @hide
*/
@Nullable
@RequiresApi(20)
@@ -383,7 +371,6 @@
}
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY)
public SliceItem(@NonNull Bundle in) {
@@ -394,7 +381,6 @@
}
/**
- * @hide
*/
@NonNull
@RestrictTo(Scope.LIBRARY)
@@ -408,7 +394,6 @@
}
/**
- * @hide
*/
@SuppressWarnings("unused")
@RestrictTo(Scope.LIBRARY)
@@ -423,7 +408,6 @@
}
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
public boolean hasAnyHints(@Nullable @Slice.SliceHint String... hints) {
@@ -494,7 +478,6 @@
}
/**
- * @hide
*/
@NonNull
@RestrictTo(Scope.LIBRARY)
@@ -529,7 +512,6 @@
/**
* @return A string representation of this slice item.
- * @hide
*/
@NonNull
@RestrictTo(Scope.LIBRARY)
@@ -754,7 +736,6 @@
}
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP_PREFIX)
public interface ActionHandler {
diff --git a/slice/slice-core/src/main/java/androidx/slice/SliceItemHolder.java b/slice/slice-core/src/main/java/androidx/slice/SliceItemHolder.java
index 1cdd23398..ab2ebba 100644
--- a/slice/slice-core/src/main/java/androidx/slice/SliceItemHolder.java
+++ b/slice/slice-core/src/main/java/androidx/slice/SliceItemHolder.java
@@ -45,7 +45,6 @@
import java.util.ArrayList;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@VersionedParcelize(allowSerialization = true, ignoreParcelables = true,
diff --git a/slice/slice-core/src/main/java/androidx/slice/SliceManager.java b/slice/slice-core/src/main/java/androidx/slice/SliceManager.java
index e0baa5e..390f09a 100644
--- a/slice/slice-core/src/main/java/androidx/slice/SliceManager.java
+++ b/slice/slice-core/src/main/java/androidx/slice/SliceManager.java
@@ -49,7 +49,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
SliceManager() {
@@ -62,7 +61,6 @@
* into account all clients and returns only specs supported by all.
* @see SliceSpec
*
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public abstract @NonNull Set<SliceSpec> getPinnedSpecs(@NonNull Uri uri);
diff --git a/slice/slice-core/src/main/java/androidx/slice/SliceManagerCompat.java b/slice/slice-core/src/main/java/androidx/slice/SliceManagerCompat.java
index 7399d29..549d939 100644
--- a/slice/slice-core/src/main/java/androidx/slice/SliceManagerCompat.java
+++ b/slice/slice-core/src/main/java/androidx/slice/SliceManagerCompat.java
@@ -29,7 +29,6 @@
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-core/src/main/java/androidx/slice/SliceManagerWrapper.java b/slice/slice-core/src/main/java/androidx/slice/SliceManagerWrapper.java
index 349dc92..d1bd08e 100644
--- a/slice/slice-core/src/main/java/androidx/slice/SliceManagerWrapper.java
+++ b/slice/slice-core/src/main/java/androidx/slice/SliceManagerWrapper.java
@@ -33,7 +33,6 @@
import java.util.Set;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(api = 28)
diff --git a/slice/slice-core/src/main/java/androidx/slice/SliceProvider.java b/slice/slice-core/src/main/java/androidx/slice/SliceProvider.java
index 8a72034..9cd8ddc 100644
--- a/slice/slice-core/src/main/java/androidx/slice/SliceProvider.java
+++ b/slice/slice-core/src/main/java/androidx/slice/SliceProvider.java
@@ -191,7 +191,6 @@
public abstract boolean onCreateSliceProvider();
/**
- * @hide
*/
@Nullable
@RestrictTo(RestrictTo.Scope.LIBRARY)
@@ -224,7 +223,6 @@
}
/**
- * @hide
* @param autoGrantPermissions
*/
@NonNull
@@ -326,7 +324,6 @@
/**
* Generate a slice that contains a permission request.
- * @hide
*/
@NonNull
@RestrictTo(RestrictTo.Scope.LIBRARY)
@@ -448,7 +445,6 @@
public void onSliceUnpinned(@NonNull Uri sliceUri) {}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
@@ -460,7 +456,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
@@ -520,7 +515,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void validateIncomingAuthority(@Nullable String authority) throws SecurityException {
@@ -603,7 +597,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
@@ -612,7 +605,6 @@
}
/**
- * @hide
*/
@Nullable
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@@ -622,7 +614,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
@@ -631,7 +622,6 @@
}
/**
- * @hide
*/
@Nullable
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
diff --git a/slice/slice-core/src/main/java/androidx/slice/SliceSpec.java b/slice/slice-core/src/main/java/androidx/slice/SliceSpec.java
index c0aaebe..13bacd9 100644
--- a/slice/slice-core/src/main/java/androidx/slice/SliceSpec.java
+++ b/slice/slice-core/src/main/java/androidx/slice/SliceSpec.java
@@ -39,7 +39,6 @@
* {@link SliceSpec} that one of the supported {@link SliceSpec}s provided
* {@link #canRender}.
*
- * @hide
* @see Slice
* @see SliceProvider#onBindSlice(Uri)
*/
@@ -55,7 +54,6 @@
/**
* Used for VersionedParcelable
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public SliceSpec() {
diff --git a/slice/slice-core/src/main/java/androidx/slice/SliceSpecs.java b/slice/slice-core/src/main/java/androidx/slice/SliceSpecs.java
index 0374db9..436d24b 100644
--- a/slice/slice-core/src/main/java/androidx/slice/SliceSpecs.java
+++ b/slice/slice-core/src/main/java/androidx/slice/SliceSpecs.java
@@ -21,7 +21,6 @@
/**
* Constants for each of the slice specs
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@RequiresApi(19)
diff --git a/slice/slice-core/src/main/java/androidx/slice/SystemClock.java b/slice/slice-core/src/main/java/androidx/slice/SystemClock.java
index 4b740f3..888d3e4 100644
--- a/slice/slice-core/src/main/java/androidx/slice/SystemClock.java
+++ b/slice/slice-core/src/main/java/androidx/slice/SystemClock.java
@@ -22,7 +22,6 @@
import androidx.annotation.RestrictTo;
/**
- * @hide
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@RequiresApi(19)
diff --git a/slice/slice-core/src/main/java/androidx/slice/compat/CompatPermissionManager.java b/slice/slice-core/src/main/java/androidx/slice/compat/CompatPermissionManager.java
index 52259f6..dc700dd 100644
--- a/slice/slice-core/src/main/java/androidx/slice/compat/CompatPermissionManager.java
+++ b/slice/slice-core/src/main/java/androidx/slice/compat/CompatPermissionManager.java
@@ -37,7 +37,6 @@
import java.util.Set;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@RequiresApi(19)
diff --git a/slice/slice-core/src/main/java/androidx/slice/compat/CompatPinnedList.java b/slice/slice-core/src/main/java/androidx/slice/compat/CompatPinnedList.java
index 876ec00..f9de140 100644
--- a/slice/slice-core/src/main/java/androidx/slice/compat/CompatPinnedList.java
+++ b/slice/slice-core/src/main/java/androidx/slice/compat/CompatPinnedList.java
@@ -38,7 +38,6 @@
/**
* Tracks the current packages requesting pinning of any given slice. It will clear the
* list after a reboot since the packages are no longer requesting pinning.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-core/src/main/java/androidx/slice/compat/SlicePermissionActivity.java b/slice/slice-core/src/main/java/androidx/slice/compat/SlicePermissionActivity.java
index af0d22d..9d704cc 100644
--- a/slice/slice-core/src/main/java/androidx/slice/compat/SlicePermissionActivity.java
+++ b/slice/slice-core/src/main/java/androidx/slice/compat/SlicePermissionActivity.java
@@ -40,7 +40,6 @@
/**
* Dialog that grants slice permissions for an app.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-core/src/main/java/androidx/slice/compat/SliceProviderCompat.java b/slice/slice-core/src/main/java/androidx/slice/compat/SliceProviderCompat.java
index f2ba233..a03e977 100644
--- a/slice/slice-core/src/main/java/androidx/slice/compat/SliceProviderCompat.java
+++ b/slice/slice-core/src/main/java/androidx/slice/compat/SliceProviderCompat.java
@@ -64,7 +64,6 @@
import java.util.Set;
/**
- * @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@RequiresApi(19)
diff --git a/slice/slice-core/src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java b/slice/slice-core/src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java
index c4e6120..b24671f 100644
--- a/slice/slice-core/src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java
+++ b/slice/slice-core/src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java
@@ -41,7 +41,6 @@
import java.util.Set;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public class SliceProviderWrapperContainer {
diff --git a/slice/slice-core/src/main/java/androidx/slice/core/SliceActionImpl.java b/slice/slice-core/src/main/java/androidx/slice/core/SliceActionImpl.java
index e46617b..503cdbf 100644
--- a/slice/slice-core/src/main/java/androidx/slice/core/SliceActionImpl.java
+++ b/slice/slice-core/src/main/java/androidx/slice/core/SliceActionImpl.java
@@ -31,6 +31,7 @@
import static android.app.slice.SliceItem.FORMAT_LONG;
import static android.app.slice.SliceItem.FORMAT_TEXT;
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
import static androidx.slice.core.SliceHints.ACTION_WITH_LABEL;
@@ -60,7 +61,6 @@
/**
* Class representing an action, supports tappable icons, custom toggle icons, and default toggles.
- * @hide
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@RequiresApi(19)
@@ -119,8 +119,8 @@
* @param actionTitle the timestamp title for this picker.
* @param dateTimeMillis the default state of the date or time picker.
* @param isDatePicker if it is a date picker, as opposed to a time picker.
- * @hide
*/
+ @RestrictTo(LIBRARY)
public SliceActionImpl(@NonNull PendingIntent action, @NonNull CharSequence actionTitle,
long dateTimeMillis, boolean isDatePicker) {
mAction = action;
@@ -194,7 +194,6 @@
*
* @param slice the slice item to construct the action out of.
*
- * @hide
*/
@RestrictTo(LIBRARY_GROUP)
@SuppressLint("InlinedApi")
@@ -314,7 +313,6 @@
}
/**
- * @hide
*/
@Nullable
@RestrictTo(LIBRARY_GROUP_PREFIX)
@@ -498,7 +496,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
public static int parseImageMode(@NonNull SliceItem iconItem) {
diff --git a/slice/slice-core/src/main/java/androidx/slice/core/SliceHints.java b/slice/slice-core/src/main/java/androidx/slice/core/SliceHints.java
index 85d312a..e08441b 100644
--- a/slice/slice-core/src/main/java/androidx/slice/core/SliceHints.java
+++ b/slice/slice-core/src/main/java/androidx/slice/core/SliceHints.java
@@ -28,7 +28,6 @@
/**
* Temporary class to contain hint constants for slices to be used.
- * @hide
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@RequiresApi(19)
diff --git a/slice/slice-core/src/main/java/androidx/slice/core/SliceQuery.java b/slice/slice-core/src/main/java/androidx/slice/core/SliceQuery.java
index 684de91..3111e1b 100644
--- a/slice/slice-core/src/main/java/androidx/slice/core/SliceQuery.java
+++ b/slice/slice-core/src/main/java/androidx/slice/core/SliceQuery.java
@@ -37,7 +37,6 @@
/**
* Utilities for finding content within a Slice.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@RequiresApi(19)
diff --git a/slice/slice-remotecallback/lint-baseline.xml b/slice/slice-remotecallback/lint-baseline.xml
deleted file mode 100644
index 5f18321..0000000
--- a/slice/slice-remotecallback/lint-baseline.xml
+++ /dev/null
@@ -1,13 +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=" public RemoteCallback toRemoteCallback(@NonNull Class<T> cls, @NonNull Context context,"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/remotecallback/RemoteSliceProvider.java"/>
- </issue>
-
-</issues>
diff --git a/slice/slice-remotecallback/src/main/java/androidx/slice/remotecallback/RemoteSliceProvider.java b/slice/slice-remotecallback/src/main/java/androidx/slice/remotecallback/RemoteSliceProvider.java
index c8ca571..be81d93 100644
--- a/slice/slice-remotecallback/src/main/java/androidx/slice/remotecallback/RemoteSliceProvider.java
+++ b/slice/slice-remotecallback/src/main/java/androidx/slice/remotecallback/RemoteSliceProvider.java
@@ -77,7 +77,6 @@
/**
* Note: Only visible because metalava doesn't realize this is hidden. Will properly
* disappear when we have support for androidx-level @RestrictTo.
- * @hide
*/
@NonNull
@Override
diff --git a/slice/slice-test/lint-baseline.xml b/slice/slice-test/lint-baseline.xml
index 59a7e74..9003689 100644
--- a/slice/slice-test/lint-baseline.xml
+++ b/slice/slice-test/lint-baseline.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.0.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-alpha05)" variant="all" version="8.0.0-alpha05">
+<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="UnspecifiedImmutableFlag"
diff --git a/slice/slice-view/api/current.txt b/slice/slice-view/api/current.txt
index 9ba9a2f..91918d9 100644
--- a/slice/slice-view/api/current.txt
+++ b/slice/slice-view/api/current.txt
@@ -152,8 +152,8 @@
method public androidx.slice.widget.GridRowView getGridRowView();
method public int getItemCount();
method public androidx.slice.widget.RowView getRowView();
- method public void onBindViewHolder(androidx.slice.widget.SliceAdapter.SliceViewHolder, int);
- method public androidx.slice.widget.SliceAdapter.SliceViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public void onBindViewHolder(androidx.slice.widget.SliceAdapter.SliceViewHolder, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public androidx.slice.widget.SliceAdapter.SliceViewHolder onCreateViewHolder(android.view.ViewGroup, int);
}
@RequiresApi(19) public abstract class SliceChildView extends android.widget.FrameLayout {
diff --git a/slice/slice-view/api/restricted_current.txt b/slice/slice-view/api/restricted_current.txt
index f46664b..9f3c43a 100644
--- a/slice/slice-view/api/restricted_current.txt
+++ b/slice/slice-view/api/restricted_current.txt
@@ -210,8 +210,8 @@
method public androidx.slice.widget.GridRowView getGridRowView();
method public int getItemCount();
method public androidx.slice.widget.RowView getRowView();
- method public void onBindViewHolder(androidx.slice.widget.SliceAdapter.SliceViewHolder, int);
- method public androidx.slice.widget.SliceAdapter.SliceViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public void onBindViewHolder(androidx.slice.widget.SliceAdapter.SliceViewHolder, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public androidx.slice.widget.SliceAdapter.SliceViewHolder onCreateViewHolder(android.view.ViewGroup, int);
}
@RequiresApi(19) public abstract class SliceChildView extends android.widget.FrameLayout {
diff --git a/slice/slice-view/lint-baseline.xml b/slice/slice-view/lint-baseline.xml
index d002e99..d89abc3 100644
--- a/slice/slice-view/lint-baseline.xml
+++ b/slice/slice-view/lint-baseline.xml
@@ -1,1661 +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">
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class ActionRow extends FrameLayout {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/ActionRow.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="class DisplayedListItems {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/DisplayedListItems.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @interface SliceRowType {}"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/EventInfo.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int ROW_TYPE_DATE_PICK = 7;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/EventInfo.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int ROW_TYPE_TIME_PICK = 8;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/EventInfo.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @interface SliceActionType{}"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/EventInfo.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int ACTION_TYPE_DATE_PICK = 6;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/EventInfo.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final int ACTION_TYPE_TIME_PICK = 7;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/EventInfo.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @interface SliceButtonPosition {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/EventInfo.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public GridContent(@NonNull SliceItem gridItem, int position) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getTitle() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public ArrayList<CellContent> getGridContent() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceItem getContentIntent() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceItem getSeeMoreItem() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isAllImages() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getLargestImageMode() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getMaxCellLineCount() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean hasImage() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean getIsLastIndex() { return mIsLastIndex; }"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setIsLastIndex(boolean isLast) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getHeight(@NonNull SliceStyle style, @NonNull SliceViewPolicy policy) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static class CellContent {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected final View mForeground;"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected int mRowIndex;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected int mRowCount;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected int mMaxCells = -1;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected @Nullable GridContent mGridContent;"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected final int mLargeImageHeight;"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected final int mSmallImageSize;"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected final int mSmallImageMinWidth;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected final int mIconSize;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected final LinearLayout mViewContainer;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setInsets(int l, int t, int r, int b) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setTint(@ColorInt int tintColor) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void onClick(@NonNull View view) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean onTouch(@NonNull View view, @NonNull MotionEvent event) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getHiddenItemCount() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/GridRowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class ListContent extends SliceContent {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/ListContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class LocationBasedViewTracker implements Runnable, View.OnLayoutChangeListener {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static void trackInputFocused(ViewGroup parent) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static void trackA11yFocus(ViewGroup parent) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class MessageView extends SliceChildView {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/MessageView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class RemoteInputView extends LinearLayout implements View.OnClickListener, TextWatcher {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setRevealParameters(int cx, int cy, int r) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final boolean isConfirmKey(int keyCode) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class RowContent extends SliceContent {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class RowStyle {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowStyle.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected Set<SliceItem> mLoadingActions = new HashSet<>();"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setStyle(SliceStyle styles, RowStyle rowStyle) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setInsets(int l, int t, int r, int b) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setTint(@ColorInt int tintColor) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setSliceActions(List<SliceAction> actions) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setShowLastUpdated(boolean showLastUpdated) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setAllowTwoLines(boolean allowTwoLines) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setLastUpdated(long lastUpdated) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setLoadingActions(Set<SliceItem> actions) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void resetView() {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class ShortcutView extends SliceChildView {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/ShortcutView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SliceActionView extends FrameLayout implements View.OnClickListener,"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setParents(SliceView parent, TemplateView templateView) {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setInsets(int l, int t, int r, int b) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setSliceObserver(SliceView.OnSliceActionListener observer) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setSliceActions(List<SliceAction> actions) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setSliceItems(List<SliceContent> slices, int color, int mode) {"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setStyle(SliceStyle style) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setPolicy(SliceViewPolicy p) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setShowLastUpdated(boolean showLastUpdated) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setLastUpdated(long lastUpdated) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setLoadingActions(Set<SliceItem> actions) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Set<SliceItem> getLoadingActions() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void onSliceActionLoading(SliceItem actionItem, int position) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setAllowTwoLines(boolean allowTwoLines) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void notifyHeaderChanged() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void onBindViewHolder(@NonNull SliceViewHolder holder, int position) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected static class SliceWrapper {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public class SliceViewHolder extends RecyclerView.ViewHolder implements View.OnTouchListener,"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected SliceView.OnSliceActionListener mObserver;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected int mMode;"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected int mTintColor = -1;"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected boolean mShowLastUpdated;"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected long mLastUpdated = -1;"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected int mInsetStart;"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected int mInsetTop;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected int mInsetEnd;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected int mInsetBottom;"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected SliceActionView.SliceActionLoadingListener mLoadingListener;"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected SliceStyle mSliceStyle;"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected RowStyle mRowStyle;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected SliceViewPolicy mViewPolicy;"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setSliceContent(ListContent content) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setInsets(int l, int t, int r, int b) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setSliceActions(List<SliceAction> actions) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getMode() {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setTint(@ColorInt int tintColor) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setShowLastUpdated(boolean showLastUpdated) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setLastUpdated(long lastUpdated) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setSliceActionListener(SliceView.OnSliceActionListener observer) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setSliceActionLoadingListener(SliceActionView.SliceActionLoadingListener listener) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setActionLoading(SliceItem item) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setLoadingActions(Set<SliceItem> loadingActions) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setAllowTwoLines(boolean allowTwoLines) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Set<SliceItem> getLoadingActions() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setStyle(SliceStyle styles, @NonNull RowStyle rowStyle) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setPolicy(@Nullable SliceViewPolicy policy) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getHiddenItemCount() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected SliceItem mSliceItem;"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected SliceItem mColorItem;"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected SliceItem mLayoutDirItem;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected SliceItem mContentDescr;"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected int mRowIndex;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceContent(@Nullable SliceItem item, int rowIndex) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceItem getSliceItem() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getAccentColor() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getLayoutDir() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public CharSequence getContentDescription() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getRowIndex() { return mRowIndex; }"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isValid() {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceAction getShortcut(@Nullable Context context) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final SliceSpec OLD_BASIC = new SliceSpec("androidx.app.slice.BASIC", 1);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final SliceSpec OLD_LIST = new SliceSpec("androidx.app.slice.LIST", 1);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final Set<SliceSpec> SUPPORTED_SPECS = new ArraySet<>("
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static CachedSliceLiveData fromStream(@NonNull Context context,"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected synchronized void loadInitialSlice() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" protected void updateSlice() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @interface SliceLoadingState{}"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceMetadata.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static List<SliceAction> getSliceActions(@NonNull Slice slice) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceMetadata.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isExpired() {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceMetadata.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean neverExpires() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceMetadata.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public long getTimeToExpiry() {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceMetadata.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public ListContent getListContent() {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceMetadata.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="class SliceMetrics {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceMetrics.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="class SliceMetricsWrapper extends SliceMetrics {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceMetricsWrapper.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceStructure(SliceItem s) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceStructure.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Uri getUri() {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceStructure.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SliceStyle {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static int parseImageMode(@NonNull SliceItem iconItem) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void checkThrow(String format) {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @FormatMode int getActionMode() {"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @FormatMode int getImageMode() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getMaxWidth() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getMaxHeight() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Bitmap.CompressFormat getFormat() {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getQuality() {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceParseException(String s, Throwable e) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public SliceParseException(String s) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public @interface SliceMode {}"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isSliceViewClickable() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setClickInfo(int[] info) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setMode(@SliceMode int mode, boolean animate) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setShowActionRow(boolean show) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public boolean isShowingActionRow() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static String modeToString(@SliceMode int mode) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public static final Comparator<SliceAction> SLICE_ACTION_PRIORITY_COMPARATOR ="
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" SliceViewManager() {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceViewManager.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public abstract class SliceViewManagerBase extends SliceViewManager {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceViewManagerBase.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="class SliceViewManagerCompat extends SliceViewManagerBase {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceViewManagerCompat.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="class SliceViewManagerWrapper extends SliceViewManagerBase {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceViewManagerWrapper.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SliceViewPolicy {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceViewPolicy.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public class SliceViewUtil {"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="class SliceXml {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/SliceXml.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setInsets(int l, int t, int r, int b) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void onForegroundActivated(MotionEvent event) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setPolicy(SliceViewPolicy policy) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setActionLoading(SliceItem item) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setLoadingActions(Set<SliceItem> loadingActions) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public Set<SliceItem> getLoadingActions() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setTint(int tint) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setSliceActionListener(SliceView.OnSliceActionListener observer) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setSliceActions(List<SliceAction> actions) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setSliceContent(ListContent sliceContent) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setStyle(SliceStyle style, @NonNull RowStyle rowStyle) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setShowLastUpdated(boolean showLastUpdated) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setLastUpdated(long lastUpdated) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void setAllowTwoLines(boolean allowTwoLines) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void resetView() {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void onScrollingChanged(boolean newScrolling) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void onMaxHeightChanged(int newNewHeight) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void onMaxSmallChanged(int newMaxSmallHeight) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public void onModeChanged(int newMode) {"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" public int getHiddenItemCount() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
- </issue>
+<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="BanSynchronizedMethods"
diff --git a/slice/slice-view/src/main/java/androidx/slice/SliceMetadata.java b/slice/slice-view/src/main/java/androidx/slice/SliceMetadata.java
index 545fe54..edbc303 100644
--- a/slice/slice-view/src/main/java/androidx/slice/SliceMetadata.java
+++ b/slice/slice-view/src/main/java/androidx/slice/SliceMetadata.java
@@ -76,7 +76,6 @@
public class SliceMetadata {
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@IntDef({
@@ -468,7 +467,6 @@
/**
* @return the group of slice actions associated with the provided slice, if they exist.
- * @hide
*/
@Nullable
@RestrictTo(RestrictTo.Scope.LIBRARY)
@@ -490,7 +488,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public boolean isExpired() {
@@ -499,7 +496,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public boolean neverExpires() {
@@ -507,7 +503,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public long getTimeToExpiry() {
@@ -517,7 +512,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public ListContent getListContent() {
diff --git a/slice/slice-view/src/main/java/androidx/slice/SliceStructure.java b/slice/slice-view/src/main/java/androidx/slice/SliceStructure.java
index d73d691..f4f1f27 100644
--- a/slice/slice-view/src/main/java/androidx/slice/SliceStructure.java
+++ b/slice/slice-view/src/main/java/androidx/slice/SliceStructure.java
@@ -56,7 +56,6 @@
/**
* Create a SliceStructure.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public SliceStructure(SliceItem s) {
@@ -72,7 +71,6 @@
/**
* @return the Uri associated with this content item if one exists.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Nullable
diff --git a/slice/slice-view/src/main/java/androidx/slice/SliceUtils.java b/slice/slice-view/src/main/java/androidx/slice/SliceUtils.java
index cf42a848..46f1d35 100644
--- a/slice/slice-view/src/main/java/androidx/slice/SliceUtils.java
+++ b/slice/slice-view/src/main/java/androidx/slice/SliceUtils.java
@@ -236,7 +236,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {
@@ -314,7 +313,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public static int parseImageMode(@NonNull SliceItem iconItem) {
@@ -375,7 +373,6 @@
private int mQuality = 100;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void checkThrow(String format) {
@@ -394,7 +391,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public @FormatMode int getActionMode() {
@@ -402,7 +398,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public @FormatMode int getImageMode() {
@@ -410,7 +405,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public int getMaxWidth() {
@@ -418,7 +412,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public int getMaxHeight() {
@@ -426,7 +419,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public Bitmap.CompressFormat getFormat() {
@@ -434,7 +426,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public int getQuality() {
@@ -527,7 +518,6 @@
*/
public static class SliceParseException extends Exception {
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public SliceParseException(String s, Throwable e) {
@@ -535,7 +525,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public SliceParseException(String s) {
diff --git a/slice/slice-view/src/main/java/androidx/slice/SliceViewManager.java b/slice/slice-view/src/main/java/androidx/slice/SliceViewManager.java
index 0d2b294..95c0d6d 100644
--- a/slice/slice-view/src/main/java/androidx/slice/SliceViewManager.java
+++ b/slice/slice-view/src/main/java/androidx/slice/SliceViewManager.java
@@ -50,7 +50,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
SliceViewManager() {
diff --git a/slice/slice-view/src/main/java/androidx/slice/SliceViewManagerBase.java b/slice/slice-view/src/main/java/androidx/slice/SliceViewManagerBase.java
index 4ab5626..217d0f17d 100644
--- a/slice/slice-view/src/main/java/androidx/slice/SliceViewManagerBase.java
+++ b/slice/slice-view/src/main/java/androidx/slice/SliceViewManagerBase.java
@@ -34,7 +34,6 @@
import java.util.concurrent.Executor;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-view/src/main/java/androidx/slice/SliceViewManagerCompat.java b/slice/slice-view/src/main/java/androidx/slice/SliceViewManagerCompat.java
index b129081..1c1d436 100644
--- a/slice/slice-view/src/main/java/androidx/slice/SliceViewManagerCompat.java
+++ b/slice/slice-view/src/main/java/androidx/slice/SliceViewManagerCompat.java
@@ -33,7 +33,6 @@
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-view/src/main/java/androidx/slice/SliceViewManagerWrapper.java b/slice/slice-view/src/main/java/androidx/slice/SliceViewManagerWrapper.java
index 5c9989d..c4364d9 100644
--- a/slice/slice-view/src/main/java/androidx/slice/SliceViewManagerWrapper.java
+++ b/slice/slice-view/src/main/java/androidx/slice/SliceViewManagerWrapper.java
@@ -40,7 +40,6 @@
import java.util.Set;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(api = 28)
diff --git a/slice/slice-view/src/main/java/androidx/slice/SliceXml.java b/slice/slice-view/src/main/java/androidx/slice/SliceXml.java
index aa8b562..1251afb 100644
--- a/slice/slice-view/src/main/java/androidx/slice/SliceXml.java
+++ b/slice/slice-view/src/main/java/androidx/slice/SliceXml.java
@@ -56,7 +56,6 @@
import java.util.List;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/ActionRow.java b/slice/slice-view/src/main/java/androidx/slice/widget/ActionRow.java
index efd9763..15f0ac0 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/ActionRow.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/ActionRow.java
@@ -51,7 +51,6 @@
import java.util.List;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/DisplayedListItems.java b/slice/slice-view/src/main/java/androidx/slice/widget/DisplayedListItems.java
index b815243..4b5ee95 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/DisplayedListItems.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/DisplayedListItems.java
@@ -23,7 +23,6 @@
/**
* The slice items we can render on the available space.
*
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
class DisplayedListItems {
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/EventInfo.java b/slice/slice-view/src/main/java/androidx/slice/widget/EventInfo.java
index 2220d02..db5231f 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/EventInfo.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/EventInfo.java
@@ -30,7 +30,6 @@
public class EventInfo {
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@IntDef({
@@ -82,19 +81,16 @@
public static final int ROW_TYPE_SELECTION = 6;
/**
* Indicates the row represents a date selection (date picker).
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public static final int ROW_TYPE_DATE_PICK = 7;
/**
* Indicates the row represents a time selection (time picker).
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public static final int ROW_TYPE_TIME_PICK = 8;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@IntDef({
@@ -134,19 +130,16 @@
public static final int ACTION_TYPE_SELECTION = 5;
/**
* Indicates the event was a selection from a date picker.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public static final int ACTION_TYPE_DATE_PICK = 6;
/**
* Indicates the event was a selection from a time picker.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public static final int ACTION_TYPE_TIME_PICK = 7;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@IntDef({
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/GridContent.java b/slice/slice-view/src/main/java/androidx/slice/widget/GridContent.java
index b6c1724..ee38115 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/GridContent.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/GridContent.java
@@ -72,7 +72,6 @@
private SliceItem mTitleItem;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public GridContent(@NonNull SliceItem gridItem, int position) {
@@ -133,7 +132,6 @@
/**
* @return the title of this grid row, if it exists.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@Nullable
@@ -148,7 +146,6 @@
/**
* @return the list of cell content for this grid.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@NonNull
@@ -158,7 +155,6 @@
/**
* @return the content intent item for this grid.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@Nullable
@@ -168,7 +164,6 @@
/**
* @return the see more item to use when not all items in the grid can be displayed.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@Nullable
@@ -186,7 +181,6 @@
/**
* @return whether the contents of this grid is just images.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public boolean isAllImages() {
@@ -195,7 +189,6 @@
/**
* @return the largest image size in this row, if there are images.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public int getLargestImageMode() {
@@ -242,7 +235,6 @@
/**
* @return the max number of lines of text in the cells of this grid row.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public int getMaxCellLineCount() {
@@ -251,7 +243,6 @@
/**
* @return whether this row contains an image.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public boolean hasImage() {
@@ -260,14 +251,12 @@
/**
* @return whether this content is being displayed last in a list.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public boolean getIsLastIndex() { return mIsLastIndex; }
/**
* Sets whether this content is being displayed last in a list.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public void setIsLastIndex(boolean isLast) {
@@ -275,7 +264,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -286,7 +274,6 @@
/**
* Extracts information required to present content in a cell.
*
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public static class CellContent {
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/GridRowView.java b/slice/slice-view/src/main/java/androidx/slice/widget/GridRowView.java
index 10215a4..9bbd5de 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/GridRowView.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/GridRowView.java
@@ -110,44 +110,44 @@
private int mHiddenItemCount;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected final View mForeground;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected int mRowIndex;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected int mRowCount;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected int mMaxCells = -1;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected @Nullable GridContent mGridContent;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected final int mLargeImageHeight;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected final int mSmallImageSize;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected final int mSmallImageMinWidth;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected final int mIconSize;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected final LinearLayout mViewContainer;
public GridRowView(@NonNull Context context) {
@@ -173,7 +173,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -215,7 +214,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -776,7 +774,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -802,7 +799,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -840,7 +836,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/ListContent.java b/slice/slice-view/src/main/java/androidx/slice/widget/ListContent.java
index 10d5836..8151152 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/ListContent.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/ListContent.java
@@ -51,7 +51,6 @@
/**
* Extracts information required to present content in a list format from a slice.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/LocationBasedViewTracker.java b/slice/slice-view/src/main/java/androidx/slice/widget/LocationBasedViewTracker.java
index b1b3c18..0404633 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/LocationBasedViewTracker.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/LocationBasedViewTracker.java
@@ -32,7 +32,6 @@
/**
* Utility class to track view based on relative location to the parent.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public class LocationBasedViewTracker implements Runnable, View.OnLayoutChangeListener {
@@ -110,7 +109,6 @@
/**
* Tries to preserve the input focus after the next content change
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public static void trackInputFocused(ViewGroup parent) {
@@ -122,7 +120,6 @@
/**
* Tries to preserve the accessibility focus after the next content change
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public static void trackA11yFocus(ViewGroup parent) {
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/MessageView.java b/slice/slice-view/src/main/java/androidx/slice/widget/MessageView.java
index 4f56a9b..8e44e18 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/MessageView.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/MessageView.java
@@ -37,7 +37,6 @@
import java.util.List;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/RemoteInputView.java b/slice/slice-view/src/main/java/androidx/slice/widget/RemoteInputView.java
index af12f00..09392c9 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/RemoteInputView.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/RemoteInputView.java
@@ -58,7 +58,6 @@
/**
* Host for the remote input.
*
- * @hide
*/
// TODO this should be unified with SystemUI RemoteInputView (b/67527720)
@SuppressWarnings("AppCompatCustomView")
@@ -266,7 +265,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setRevealParameters(int cx, int cy, int r) {
@@ -432,7 +430,6 @@
}
/** Whether key will, by default, trigger a click on the focused view.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public static final boolean isConfirmKey(int keyCode) {
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/RowContent.java b/slice/slice-view/src/main/java/androidx/slice/widget/RowContent.java
index dd54cb42..eed88be 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/RowContent.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/RowContent.java
@@ -57,7 +57,6 @@
/**
* Extracts information required to present content in a row format from a slice.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@RequiresApi(19)
@@ -353,7 +352,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/RowStyle.java b/slice/slice-view/src/main/java/androidx/slice/widget/RowStyle.java
index cf3c170..02416ac 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/RowStyle.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/RowStyle.java
@@ -28,7 +28,6 @@
/**
* Holds style information shared between child views of a row
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/RowView.java b/slice/slice-view/src/main/java/androidx/slice/widget/RowView.java
index f094431..34d23e5 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/RowView.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/RowView.java
@@ -159,7 +159,6 @@
private boolean mIsStarRating;
private final ProgressBar mActionSpinner;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
protected Set<SliceItem> mLoadingActions = new HashSet<>();
@@ -236,7 +235,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -314,7 +312,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -386,7 +383,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -402,7 +398,6 @@
* @param actions if the actions are null then there are no header actions for this row.
* If the actions are an empty list, then something has explicitly set that no header
* actions should appear.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -414,7 +409,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -426,7 +420,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -706,7 +699,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -1148,7 +1140,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -1367,7 +1358,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/ShortcutView.java b/slice/slice-view/src/main/java/androidx/slice/widget/ShortcutView.java
index ac95f15..89ae3d0 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/ShortcutView.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/ShortcutView.java
@@ -39,7 +39,6 @@
import java.util.Set;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/SliceActionView.java b/slice/slice-view/src/main/java/androidx/slice/widget/SliceActionView.java
index 719e639..e5b20d0 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/SliceActionView.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/SliceActionView.java
@@ -52,7 +52,6 @@
/**
* Supports displaying {@link androidx.slice.core.SliceActionImpl}s.
- * @hide
*/
@SuppressWarnings("AppCompatCustomView")
@RestrictTo(LIBRARY)
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/SliceAdapter.java b/slice/slice-view/src/main/java/androidx/slice/widget/SliceAdapter.java
index 08781d8..f8ae73a 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/SliceAdapter.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/SliceAdapter.java
@@ -32,6 +32,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
import androidx.collection.ArrayMap;
import androidx.recyclerview.widget.RecyclerView;
import androidx.slice.SliceItem;
@@ -102,8 +103,8 @@
/**
* Sets the SliceView parent and the template parent.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setParents(SliceView parent, TemplateView templateView) {
mParent = parent;
mTemplateView = templateView;
@@ -113,8 +114,8 @@
* Sets the insets (padding) for slice view. SliceAdapter will handle determining
* if a child needs a particular padding, i.e. if it's the first row then the top inset
* will be applied to it whereas subsequent rows would get a top inset of 0.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setInsets(int l, int t, int r, int b) {
mInsetStart = l;
mInsetTop = t;
@@ -124,16 +125,16 @@
/**
* Sets the observer to pass down to child views.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setSliceObserver(SliceView.OnSliceActionListener observer) {
mSliceObserver = observer;
}
/**
* Sets the actions to display for this slice, this adjusts what's displayed in the header item.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setSliceActions(List<SliceAction> actions) {
mSliceActions = actions;
notifyHeaderChanged();
@@ -141,8 +142,8 @@
/**
* Set the {@link SliceItem}'s to be displayed in the adapter and the accent color.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setSliceItems(List<SliceContent> slices, int color, int mode) {
if (slices == null) {
mLoadingActions.clear();
@@ -160,8 +161,8 @@
/**
* Sets the style information to use for views in this adapter.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setStyle(SliceStyle style) {
mSliceStyle = style;
notifyDataSetChanged();
@@ -169,16 +170,16 @@
/**
* Sets the policy information to use for views in this adapter.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setPolicy(SliceViewPolicy p) {
mPolicy = p;
}
/**
* Sets whether the last updated time should be shown on the slice.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setShowLastUpdated(boolean showLastUpdated) {
if (mShowLastUpdated != showLastUpdated) {
mShowLastUpdated = showLastUpdated;
@@ -188,8 +189,8 @@
/**
* Sets when the slice was last updated.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setLastUpdated(long lastUpdated) {
if (mLastUpdated != lastUpdated) {
mLastUpdated = lastUpdated;
@@ -199,8 +200,8 @@
/**
* Indicates that no actions should be loading and updates the views.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setLoadingActions(Set<SliceItem> actions) {
if (actions == null) {
mLoadingActions.clear();
@@ -212,15 +213,15 @@
/**
* Returns the currently loading actions.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public Set<SliceItem> getLoadingActions() {
return mLoadingActions;
}
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
public void onSliceActionLoading(SliceItem actionItem, int position) {
mLoadingActions.add(actionItem);
@@ -233,8 +234,8 @@
/**
* Sets whether this slice can have 2 lines of subtitle text in the first row.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setAllowTwoLines(boolean allowTwoLines) {
mAllowTwoLines = allowTwoLines;
notifyHeaderChanged();
@@ -242,8 +243,8 @@
/**
* Notifies that content in the header of this adapter has changed.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void notifyHeaderChanged() {
if (getItemCount() > 0) {
notifyItemChanged(HEADER_INDEX);
@@ -251,8 +252,8 @@
}
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@NonNull
public SliceViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@@ -277,8 +278,8 @@
}
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
public void onBindViewHolder(@NonNull SliceViewHolder holder, int position) {
SliceWrapper slice = mSlices.get(position);
@@ -320,8 +321,8 @@
}
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected static class SliceWrapper {
final SliceContent mItem;
final int mType;
@@ -354,8 +355,8 @@
/**
* A {@link RecyclerView.ViewHolder} for presenting slices in {@link SliceAdapter}.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public class SliceViewHolder extends RecyclerView.ViewHolder implements View.OnTouchListener,
View.OnClickListener {
public final SliceChildView mSliceChildView;
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/SliceChildView.java b/slice/slice-view/src/main/java/androidx/slice/widget/SliceChildView.java
index 8c61fb4..b0795bf 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/SliceChildView.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/SliceChildView.java
@@ -40,56 +40,56 @@
public abstract class SliceChildView extends FrameLayout {
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected SliceView.OnSliceActionListener mObserver;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected int mMode;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected int mTintColor = -1;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected boolean mShowLastUpdated;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected long mLastUpdated = -1;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected int mInsetStart;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected int mInsetTop;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected int mInsetEnd;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected int mInsetBottom;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected SliceActionView.SliceActionLoadingListener mLoadingListener;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected SliceStyle mSliceStyle;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected RowStyle mRowStyle;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected SliceViewPolicy mViewPolicy;
public SliceChildView(@NonNull Context context) {
@@ -107,7 +107,6 @@
/**
* Sets the content to display in this slice.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setSliceContent(ListContent content) {
@@ -116,7 +115,6 @@
/**
* Sets the insets (padding) for the slice.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setInsets(int l, int t, int r, int b) {
@@ -136,7 +134,6 @@
/**
* Sets the slice actions for this view.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setSliceActions(List<SliceAction> actions) {
@@ -145,8 +142,8 @@
/**
* @return the mode of the slice being presented.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
@SliceView.SliceMode
public int getMode() {
return mViewPolicy != null ? mViewPolicy.getMode() : MODE_LARGE;
@@ -154,7 +151,6 @@
/**
* Sets a custom color to use for tinting elements like icons for this view.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setTint(@ColorInt int tintColor) {
@@ -163,7 +159,6 @@
/**
* Sets whether the last updated time should be displayed.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setShowLastUpdated(boolean showLastUpdated) {
@@ -172,7 +167,6 @@
/**
* Sets when the content of this view was last updated.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setLastUpdated(long lastUpdated) {
@@ -181,23 +175,22 @@
/**
* Sets the observer to notify when an interaction events occur on the view.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setSliceActionListener(SliceView.OnSliceActionListener observer) {
mObserver = observer;
}
/**
* Sets the listener to notify whenever an action is being loaded.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public void setSliceActionLoadingListener(SliceActionView.SliceActionLoadingListener listener) {
mLoadingListener = listener;
}
/**
* Indicates that a particular action is being loaded.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setActionLoading(SliceItem item) {
@@ -205,7 +198,6 @@
/**
* Sets the actions that are being loaded.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setLoadingActions(Set<SliceItem> loadingActions) {
@@ -213,7 +205,6 @@
/**
* Sets whether this slice can have 2 lines of subtitle text in the first row.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setAllowTwoLines(boolean allowTwoLines) {
@@ -221,7 +212,6 @@
/**
* The set of currently loading actions.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public Set<SliceItem> getLoadingActions() {
@@ -230,7 +220,6 @@
/**
* Sets the style information for this view.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setStyle(SliceStyle styles, @NonNull RowStyle rowStyle) {
@@ -240,7 +229,6 @@
/**
* Sets the policy information for this view.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setPolicy(@Nullable SliceViewPolicy policy) {
@@ -248,7 +236,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public int getHiddenItemCount() {
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/SliceContent.java b/slice/slice-view/src/main/java/androidx/slice/widget/SliceContent.java
index 6dc5983..a56e1e9 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/SliceContent.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/SliceContent.java
@@ -58,24 +58,24 @@
public class SliceContent {
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected SliceItem mSliceItem;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected SliceItem mColorItem;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected SliceItem mLayoutDirItem;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected SliceItem mContentDescr;
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
protected int mRowIndex;
public SliceContent(@Nullable Slice slice) {
@@ -86,7 +86,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public SliceContent(@Nullable SliceItem item, int rowIndex) {
@@ -108,8 +107,8 @@
/**
* @return the slice item used to construct this content.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
@Nullable
public SliceItem getSliceItem() {
return mSliceItem;
@@ -117,24 +116,24 @@
/**
* @return the accent color to use for this content or -1 if no color is set.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public int getAccentColor() {
return mColorItem != null ? mColorItem.getInt() : -1;
}
/**
* @return the layout direction to use for this content or -1 if no direction set.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public int getLayoutDir() {
return mLayoutDirItem != null ? resolveLayoutDirection(mLayoutDirItem.getInt()) : -1;
}
/**
* @return the content description to use for this row if set.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
@Nullable
public CharSequence getContentDescription() {
return mContentDescr != null ? mContentDescr.getText() : null;
@@ -142,31 +141,31 @@
/**
* @return the row index of this content, or -1 if no row index is set.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public int getRowIndex() { return mRowIndex; }
/**
* @return the desired height of this content based on the provided mode and context or the
* default height if context is null.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public int getHeight(SliceStyle style, SliceViewPolicy policy) {
return 0;
}
/**
* @return whether this content is valid to display or not.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
public boolean isValid() {
return mSliceItem != null;
}
/**
* @return the action that represents the shortcut.
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
@Nullable
public SliceAction getShortcut(@Nullable Context context) {
if (mSliceItem == null) {
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/SliceLiveData.java b/slice/slice-view/src/main/java/androidx/slice/widget/SliceLiveData.java
index 9357327..8fc3a85 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/SliceLiveData.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/SliceLiveData.java
@@ -61,19 +61,16 @@
private static final String TAG = "SliceLiveData";
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public static final SliceSpec OLD_BASIC = new SliceSpec("androidx.app.slice.BASIC", 1);
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public static final SliceSpec OLD_LIST = new SliceSpec("androidx.app.slice.LIST", 1);
/**
- * @hide
*/
@RestrictTo(LIBRARY)
public static final Set<SliceSpec> SUPPORTED_SPECS = new ArraySet<>(
@@ -139,7 +136,6 @@
/**
* Version for testing
- * @hide
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@NonNull
@@ -208,7 +204,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
@SuppressWarnings("deprecation") /* AsyncTask */
@@ -292,7 +287,6 @@
}
/**
- * @hide
*/
@RestrictTo(LIBRARY)
protected void updateSlice() {
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/SliceMetrics.java b/slice/slice-view/src/main/java/androidx/slice/widget/SliceMetrics.java
index 6592759..faa5e10 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/SliceMetrics.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/SliceMetrics.java
@@ -26,7 +26,6 @@
import androidx.annotation.RestrictTo;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/SliceMetricsWrapper.java b/slice/slice-view/src/main/java/androidx/slice/widget/SliceMetricsWrapper.java
index ad74f35..adb43d8 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/SliceMetricsWrapper.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/SliceMetricsWrapper.java
@@ -24,7 +24,6 @@
import androidx.annotation.RestrictTo;
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(api = 28)
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/SliceStyle.java b/slice/slice-view/src/main/java/androidx/slice/widget/SliceStyle.java
index 60917e0..2440e67 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/SliceStyle.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/SliceStyle.java
@@ -41,7 +41,6 @@
/**
* Holds style information shared between child views of a slice
*
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/SliceView.java b/slice/slice-view/src/main/java/androidx/slice/widget/SliceView.java
index 2d53b83..8c6fd44 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/SliceView.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/SliceView.java
@@ -115,7 +115,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@IntDef({
@@ -253,7 +252,6 @@
/**
* Indicates whether this view reacts to click events or not.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public boolean isSliceViewClickable() {
@@ -263,7 +261,6 @@
/**
* Sets the event info for logging a click.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setClickInfo(int[] info) {
@@ -629,7 +626,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void setMode(@SliceMode int mode, boolean animate) {
@@ -714,7 +710,6 @@
}
/**
- * @hide
*
* Whether this view should show a row of actions with it.
*/
@@ -726,7 +721,6 @@
/**
* @return whether this view is showing a row of actions.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public boolean isShowingActionRow() {
@@ -853,7 +847,6 @@
/**
* @return String representation of the provided mode.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public static String modeToString(@SliceMode int mode) {
@@ -970,7 +963,6 @@
};
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public static final Comparator<SliceAction> SLICE_ACTION_PRIORITY_COMPARATOR =
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/SliceViewPolicy.java b/slice/slice-view/src/main/java/androidx/slice/widget/SliceViewPolicy.java
index 7c32336..57dcf89 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/SliceViewPolicy.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/SliceViewPolicy.java
@@ -24,7 +24,6 @@
/**
* Class containing configurable settings for SliceView that may impact interaction and contents
* of the slice that are displayed.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/SliceViewUtil.java b/slice/slice-view/src/main/java/androidx/slice/widget/SliceViewUtil.java
index 88b64df..f4f0499 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/SliceViewUtil.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/SliceViewUtil.java
@@ -51,7 +51,6 @@
/**
* A bunch of utilities for slice UI.
*
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@RequiresApi(19)
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/TemplateView.java b/slice/slice-view/src/main/java/androidx/slice/widget/TemplateView.java
index 33f8625..b26282b 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/TemplateView.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/TemplateView.java
@@ -98,7 +98,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -110,7 +109,6 @@
/**
* Called when the foreground view handling touch feedback should be activated.
* @param event the event to handle.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
public void onForegroundActivated(MotionEvent event) {
@@ -136,7 +134,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -147,7 +144,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -156,7 +152,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -165,7 +160,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -174,7 +168,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -184,8 +177,8 @@
}
/**
- * @hide
*/
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
public void setSliceActionListener(SliceView.OnSliceActionListener observer) {
mObserver = observer;
@@ -195,7 +188,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -204,7 +196,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -215,7 +206,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -232,7 +222,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -242,7 +231,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -252,7 +240,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -283,7 +270,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -295,7 +281,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -310,7 +295,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -321,7 +305,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -332,7 +315,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
@@ -343,7 +325,6 @@
}
/**
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Override
diff --git a/tv/tv-foundation/build.gradle b/tv/tv-foundation/build.gradle
index eace93c..365414c 100644
--- a/tv/tv-foundation/build.gradle
+++ b/tv/tv-foundation/build.gradle
@@ -30,12 +30,12 @@
dependencies {
api(libs.kotlinStdlib)
- def composeVersion = '1.4.2'
+ def composeVersion = '1.4.3'
implementation(libs.kotlinStdlibCommon)
- implementation("androidx.profileinstaller:profileinstaller:1.3.0")
+ implementation("androidx.profileinstaller:profileinstaller:1.3.1")
- api("androidx.annotation:annotation:1.5.0")
+ api("androidx.annotation:annotation:1.6.0")
api("androidx.compose.animation:animation:$composeVersion")
api("androidx.compose.runtime:runtime:$composeVersion")
diff --git a/tv/tv-material/build.gradle b/tv/tv-material/build.gradle
index 760e574..c215dc0 100644
--- a/tv/tv-material/build.gradle
+++ b/tv/tv-material/build.gradle
@@ -27,14 +27,14 @@
dependencies {
api(libs.kotlinStdlib)
- def composeVersion = '1.4.2'
+ def composeVersion = '1.4.3'
- api(project(":compose:animation:animation"))
+ api("androidx.compose.animation:animation:$composeVersion")
api("androidx.compose.material:material-icons-core:$composeVersion")
api(project(":tv:tv-foundation"))
implementation(libs.kotlinStdlibCommon)
- implementation("androidx.profileinstaller:profileinstaller:1.3.0")
+ implementation("androidx.profileinstaller:profileinstaller:1.3.1")
androidTestImplementation(libs.truth)
diff --git a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
index f6c528c..cc0f06d 100644
--- a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
@@ -18,7 +18,9 @@
import android.os.Build
import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.size
+import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.testutils.assertAgainstGolden
import androidx.compose.ui.Alignment
@@ -78,25 +80,57 @@
verifySwipedScreenshot(LayoutDirection.Rtl, 0.5f)
}
+ @Test
+ fun on_dismiss_overload_swiped_to_right_25_percent_ltr() {
+ verifySwipedScreenshot(LayoutDirection.Ltr, 0.25f, true,
+ "swiped_to_right_25_percent_ltr")
+ }
+
+ @Test
+ fun on_dismiss_overload_swiped_to_right_25_percent_rtl() {
+ verifySwipedScreenshot(LayoutDirection.Rtl, 0.25f, true,
+ "swiped_to_right_25_percent_rtl")
+ }
+
+ @Test
+ fun on_dismiss_overload_swiped_to_right_50_percent_ltr() {
+ verifySwipedScreenshot(LayoutDirection.Ltr, 0.5f, true,
+ "swiped_to_right_50_percent_ltr")
+ }
+
+ @Test
+ fun on_dismiss_overload_swiped_to_right_50_percent_rtl() {
+ verifySwipedScreenshot(LayoutDirection.Rtl, 0.5f, true,
+ "swiped_to_right_50_percent_rtl")
+ }
+
private fun verifySwipedScreenshot(
layoutDirection: LayoutDirection,
swipedPercentage: Float,
+ isOnDismissOverload: Boolean = false,
+ goldenIdentifier: String = testName.methodName
) {
rule.setContentWithTheme {
CompositionLocalProvider(LocalLayoutDirection provides layoutDirection) {
val state = rememberSwipeToDismissBoxState()
- SwipeToDismissBox(
- modifier = Modifier.testTag(TEST_TAG).size(106.dp),
- state = state
- ) { isBackground ->
- if (isBackground) {
- Box(modifier = Modifier.align(Alignment.Center)) {
- Text(color = Color.White, text = "Background")
- }
- } else {
- Box(modifier = Modifier.align(Alignment.Center)) {
- Text(color = Color.White, text = "Foreground")
- }
+ if (isOnDismissOverload) {
+ SwipeToDismissBox(
+ onDismissed = {},
+ modifier = Modifier
+ .testTag(TEST_TAG)
+ .size(106.dp),
+ state = state
+ ) { isBackground ->
+ boxContent(isBackground = isBackground)
+ }
+ } else {
+ SwipeToDismissBox(
+ modifier = Modifier
+ .testTag(TEST_TAG)
+ .size(106.dp),
+ state = state
+ ) { isBackground ->
+ boxContent(isBackground = isBackground)
}
}
}
@@ -108,6 +142,19 @@
rule.onNodeWithTag(TEST_TAG)
.captureToImage()
- .assertAgainstGolden(screenshotRule, testName.methodName)
+ .assertAgainstGolden(screenshotRule, goldenIdentifier)
+ }
+
+ @Composable
+ private fun BoxScope.boxContent(isBackground: Boolean) {
+ if (isBackground) {
+ Box(modifier = Modifier.align(Alignment.Center)) {
+ Text(color = Color.White, text = "Background")
+ }
+ } else {
+ Box(modifier = Modifier.align(Alignment.Center)) {
+ Text(color = Color.White, text = "Foreground")
+ }
+ }
}
}
\ No newline at end of file
diff --git a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToDismissBox.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToDismissBox.kt
index 5430358..204985b 100644
--- a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToDismissBox.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToDismissBox.kt
@@ -38,7 +38,6 @@
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
-import androidx.compose.ui.draw.clip
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.RectangleShape
@@ -258,7 +257,7 @@
modifier: Modifier = Modifier,
state: SwipeToDismissBoxState = rememberSwipeToDismissBoxState(),
backgroundScrimColor: Color = MaterialTheme.colors.background,
- contentScrimColor: Color = contentColorFor(backgroundScrimColor),
+ contentScrimColor: Color = MaterialTheme.colors.background,
backgroundKey: Any = SwipeToDismissKeys.Background,
contentKey: Any = SwipeToDismissKeys.Content,
hasBackground: Boolean = true,
diff --git a/wear/protolayout/protolayout-proto/src/main/proto/color.proto b/wear/protolayout/protolayout-proto/src/main/proto/color.proto
index f5535d9..d19205a 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/color.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/color.proto
@@ -10,9 +10,15 @@
// A property defining a color.
message ColorProp {
- // The color value, in ARGB format.
+ // The static color value, in ARGB format. 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
+ // (equivalent to {@link Color#TRANSPARENT}) will be used instead.
optional uint32 argb = 1;
- // The dynamic value.
+ // The dynamic value. Note that when setting this value, the static value is
+ // still required to be set 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.
androidx.wear.protolayout.expression.proto.DynamicColor dynamic_value = 2;
}
diff --git a/wear/protolayout/protolayout-proto/src/main/proto/dimension.proto b/wear/protolayout/protolayout-proto/src/main/proto/dimension.proto
index 2a15694..5ff8223 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/dimension.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/dimension.proto
@@ -12,10 +12,15 @@
// A type for linear dimensions, measured in dp.
message DpProp {
- // The value, in dp.
+ // The static value, in dp. 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.
optional float value = 1;
- // The dynamic value, in dp.
+ // The dynamic value, in dp. Note that when setting this value, the static value is
+ // still required to be set 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.
androidx.wear.protolayout.expression.proto.DynamicFloat dynamic_value = 2;
oneof optional_value_for_layout {
@@ -77,10 +82,15 @@
// A type for angular dimensions, measured in degrees.
message DegreesProp {
- // The value, in degrees.
+ // The static value, in degrees. 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.
optional float value = 1;
- // The dynamic value, in degrees.
+ // The dynamic value, in degrees. Note that when setting this value, the static value is
+ // still required to be set 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.
androidx.wear.protolayout.expression.proto.DynamicFloat dynamic_value = 2;
oneof optional_value_for_layout {
diff --git a/wear/protolayout/protolayout-proto/src/main/proto/types.proto b/wear/protolayout/protolayout-proto/src/main/proto/types.proto
index 9d9227f..865f5e3 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/types.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/types.proto
@@ -22,11 +22,17 @@
message StringProp {
oneof optional_value {
- // The value.
+ // 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, {@code null} will be used
+ // instead.
string value = 1;
}
- // The dynamic value.
+ // The dynamic value. Note that when setting this value, the static value is
+ // still required to be set 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.
androidx.wear.protolayout.expression.proto.DynamicString dynamic_value = 2;
oneof optional_value_for_layout {
@@ -42,10 +48,15 @@
// A float type.
message FloatProp {
- // The value.
+ // 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.
optional float value = 1;
- // The dynamic value.
+ // The dynamic value. Note that when setting this value, the static value is
+ // still required to be set 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.
androidx.wear.protolayout.expression.proto.DynamicFloat dynamic_value = 2;
}
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ColorBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ColorBuilders.java
index e70f637..36981b9 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ColorBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ColorBuilders.java
@@ -18,6 +18,8 @@
import static androidx.wear.protolayout.expression.Preconditions.checkNotNull;
+import android.graphics.Color;
+
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -115,9 +117,10 @@
}
/**
- * Sets the color value, in ARGB format.
- * If a dynamic value is also set and the renderer supports dynamic values for the
- * corresponding field, this static value will be ignored.
+ * Sets the static color value, in ARGB format. 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 (equivalent to {@link
+ * Color#TRANSPARENT}) will be used instead.
*
* @since 1.0
*/
@@ -130,7 +133,9 @@
/**
* Sets the dynamic value. Note that when setting this value, the static value is still
- * required to be set to support older renderers that only read the static value.
+ * required to be set 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
*/
@@ -142,7 +147,13 @@
return this;
}
- /** Builds an instance from accumulated values. */
+ /**
+ * Builds an instance from accumulated values.
+ *
+ * @throws IllegalStateException if a dynamic value is set using {@link
+ * #setDynamicValue(DynamicColor)} but neither {@link #Builder(int)} nor {@link
+ * #setArgb(int)} is used to provide a static value.
+ */
@NonNull
public ColorProp build() {
if (mImpl.hasDynamicValue() && !mImpl.hasArgb()) {
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 55627c1..1114eb6 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
@@ -229,7 +229,7 @@
/**
* Sets the static value, in dp. If a dynamic value is also set and the renderer
* supports dynamic values for the corresponding field, this static value will be
- * ignored.
+ * ignored. If the static value is not specified, zero will be used instead.
*
* @since 1.0
*/
@@ -243,6 +243,8 @@
/**
* Sets the dynamic value, in dp. Note that when setting this value, the static value is
* still required to be set 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
*/
@@ -254,6 +256,13 @@
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.
+ */
@Override
@NonNull
public DpProp build() {
@@ -525,8 +534,7 @@
public Builder() {}
/**
- * Sets the value, in sp. If a dynamic value is also set and the renderer supports
- * dynamic values for the corresponding field, this static value will be ignored.
+ * Sets the value, in sp.
*
* @since 1.0
*/
@@ -727,7 +735,7 @@
/**
* Sets the static value, in degrees. If a dynamic value is also set and the renderer
* supports dynamic values for the corresponding field, this static value will be
- * ignored.
+ * ignored. If the static value is not specified, zero will be used instead.
*
* @since 1.0
*/
@@ -741,7 +749,8 @@
/**
* Sets the dynamic value, in degrees. Note that when setting this value, the static
* value is still required to be set to support older renderers that only read the
- * static value.
+ * static value. If {@code dynamicValue} has an invalid result, the provided static
+ * value will be used instead.
*
* @since 1.2
*/
@@ -753,7 +762,13 @@
return this;
}
- /** Builds an instance from accumulated values. */
+ /**
+ * 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 DegreesProp build() {
if (mImpl.hasDynamicValue() && !mImpl.hasValue()) {
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 15cf3aa..7a4cee0 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
@@ -182,7 +182,8 @@
/**
* 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.
+ * dynamic values for the corresponding field, this static value will be ignored. If the
+ * static value is not specified, {@code null} will be used instead.
*
* @since 1.0
*/
@@ -195,7 +196,9 @@
/**
* Sets the dynamic value. Note that when setting this value, the static value is still
- * required to be set to support older renderers that only read the static value.
+ * required to be set 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
*/
@@ -207,7 +210,14 @@
return this;
}
- /** Builds an instance from accumulated values. */
+ /**
+ * Builds an instance from accumulated values.
+ *
+ * @throws IllegalStateException if a dynamic value is set using {@link
+ * #setDynamicValue(DynamicBuilders.DynamicString)} but neither {@link
+ * #Builder(String)} nor {@link #setValue(String)} is used to provide a static
+ * value.
+ */
@NonNull
public StringProp build() {
if (mImpl.hasDynamicValue() && !mImpl.hasValue()) {
@@ -400,8 +410,8 @@
/**
* 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.
+ * 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
*/
@@ -415,9 +425,8 @@
/**
* 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.
+ * 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
*/
@@ -432,15 +441,13 @@
/**
* 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.
+ * @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()){
+ if (mImpl.hasDynamicValue() && !mImpl.hasValue()) {
throw new IllegalStateException("Static value is missing.");
}
return new FloatProp(mImpl.build(), mFingerprint);
diff --git a/wear/watchface/watchface-complications-data-source-samples/build.gradle b/wear/watchface/watchface-complications-data-source-samples/build.gradle
index 6c7db9a..0ff1cd5 100644
--- a/wear/watchface/watchface-complications-data-source-samples/build.gradle
+++ b/wear/watchface/watchface-complications-data-source-samples/build.gradle
@@ -25,11 +25,14 @@
api(project(":wear:watchface:watchface-complications-data-source"))
api(libs.guavaAndroid)
api(libs.kotlinStdlib)
+ // TODO(b/267170061): Use released protolayout-expression, remove protolayout-proto.
+ implementation(project(":wear:protolayout:protolayout-expression"))
+ implementation(project(":wear:protolayout:protolayout-proto"))
}
android {
defaultConfig {
- minSdkVersion 26
+ minSdkVersion 29
}
namespace "androidx.wear.watchface.complications.datasource.samples"
}
diff --git a/wear/watchface/watchface-complications-data-source-samples/src/main/AndroidManifest.xml b/wear/watchface/watchface-complications-data-source-samples/src/main/AndroidManifest.xml
index dbbf0be..acd67f3 100644
--- a/wear/watchface/watchface-complications-data-source-samples/src/main/AndroidManifest.xml
+++ b/wear/watchface/watchface-complications-data-source-samples/src/main/AndroidManifest.xml
@@ -17,6 +17,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission
android:name="com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE" />
+ <uses-permission
+ android:name="android.permission.ACTIVITY_RECOGNITION" />
+ <uses-permission
+ android:name="android.permission.BODY_SENSORS" />
<application
android:label="@string/app_name"
android:icon="@drawable/circle"
@@ -215,6 +219,63 @@
</intent-filter>
</service>
+ <service android:name=".dynamic.TimeDataSourceService"
+ android:label="@string/dynamic_time_data_source_name"
+ android:exported="true"
+ android:icon="@drawable/circle"
+ android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
+ <meta-data
+ android:name="android.support.wearable.complications.SUPPORTED_TYPES"
+ android:value="RANGED_VALUE"/>
+ <meta-data
+ android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
+ android:value="0"/>
+ <intent-filter>
+ <action android:name=
+ "android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST"/>
+ </intent-filter>
+ </service>
+
+ <service android:name=".dynamic.HeartRateDataSourceService"
+ android:label="@string/dynamic_heart_rate_data_source_name"
+ android:exported="true"
+ android:icon="@drawable/circle"
+ android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
+ <meta-data
+ android:name="android.support.wearable.complications.SUPPORTED_TYPES"
+ android:value="RANGED_VALUE"/>
+ <meta-data
+ android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
+ android:value="0"/>
+ <meta-data
+ android:name="android.support.wearable.complications.PROVIDER_CONFIG_ACTION"
+ android:value="androidx.wear.watchface.complications.datasource.samples.dynamic.REQUEST_BODY_SENSORS_PERMISSION"/>
+ <intent-filter>
+ <action android:name=
+ "android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST"/>
+ </intent-filter>
+ </service>
+
+ <service android:name=".dynamic.StepsDataSourceService"
+ android:label="@string/dynamic_steps_data_source_name"
+ android:exported="true"
+ android:icon="@drawable/circle"
+ android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
+ <meta-data
+ android:name="android.support.wearable.complications.SUPPORTED_TYPES"
+ android:value="RANGED_VALUE"/>
+ <meta-data
+ android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
+ android:value="0"/>
+ <meta-data
+ android:name="android.support.wearable.complications.PROVIDER_CONFIG_ACTION"
+ android:value="androidx.wear.watchface.complications.datasource.samples.dynamic.REQUEST_ACTIVITY_RECOGNITION_PERMISSION"/>
+ <intent-filter>
+ <action android:name=
+ "android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST"/>
+ </intent-filter>
+ </service>
+
<activity
android:name=".ConfigActivity"
android:exported="true"
@@ -227,5 +288,19 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
+ <activity
+ android:name=".dynamic.RequestPermissionActivity"
+ android:exported="true"
+ android:label="@string/config_title" >
+ <intent-filter>
+ <action android:name=
+ "androidx.wear.watchface.complications.datasource.samples.dynamic.REQUEST_ACTIVITY_RECOGNITION_PERMISSION" />
+ <action android:name=
+ "androidx.wear.watchface.complications.datasource.samples.dynamic.REQUEST_BODY_SENSORS_PERMISSION" />
+ <category android:name=
+ "android.support.wearable.complications.category.PROVIDER_CONFIG" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
</application>
</manifest>
diff --git a/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/dynamic/HeartRateDataSourceService.kt b/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/dynamic/HeartRateDataSourceService.kt
new file mode 100644
index 0000000..83548da
--- /dev/null
+++ b/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/dynamic/HeartRateDataSourceService.kt
@@ -0,0 +1,92 @@
+/*
+ * 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.watchface.complications.datasource.samples.dynamic
+
+import android.Manifest.permission
+import android.content.pm.PackageManager.PERMISSION_GRANTED
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat
+import androidx.wear.protolayout.expression.PlatformHealthSources
+import androidx.wear.watchface.complications.data.ComplicationData
+import androidx.wear.watchface.complications.data.ComplicationType
+import androidx.wear.watchface.complications.data.DynamicComplicationText
+import androidx.wear.watchface.complications.data.PlainComplicationText
+import androidx.wear.watchface.complications.data.RangedValueComplicationData
+import androidx.wear.watchface.complications.datasource.ComplicationDataSourceService
+import androidx.wear.watchface.complications.datasource.ComplicationRequest
+
+class HeartRateDataSourceService : ComplicationDataSourceService() {
+ override fun onComplicationRequest(
+ request: ComplicationRequest,
+ listener: ComplicationRequestListener
+ ) {
+ val fallbackText = PlainComplicationText.Builder("--").build()
+
+ if (checkSelfPermission(permission.BODY_SENSORS) != PERMISSION_GRANTED) {
+ listener.onComplicationData(
+ RangedValueComplicationData.Builder(
+ value = 0f,
+ min = 0f,
+ max = 200f,
+ contentDescription = fallbackText,
+ )
+ .setText(fallbackText)
+ .build()
+ )
+ return
+ }
+
+ val value = PlatformHealthSources.heartRateBpm()
+ val text = DynamicComplicationText(value.format(), "--")
+
+ listener.onComplicationData(
+ RangedValueComplicationData.Builder(
+ dynamicValue =
+ DynamicFloat.onCondition(value.gt(200f))
+ .use(DynamicFloat.constant(200f))
+ .elseUse(value),
+ fallbackValue = 0f,
+ min = 0f,
+ max = 200f,
+ contentDescription = text,
+ )
+ .setText(text)
+ .setDynamicValueInvalidationFallback(
+ RangedValueComplicationData.Builder(
+ value = 0f,
+ min = 0f,
+ max = 200f,
+ contentDescription = fallbackText,
+ )
+ .setText(fallbackText)
+ .build()
+ )
+ .build()
+ )
+ }
+
+ override fun getPreviewData(type: ComplicationType): ComplicationData {
+ val text = PlainComplicationText.Builder("82").build()
+ return RangedValueComplicationData.Builder(
+ value = 82f,
+ min = 0f,
+ max = 200f,
+ contentDescription = text,
+ )
+ .setText(text)
+ .build()
+ }
+}
diff --git a/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/dynamic/RequestPermissionActivity.kt b/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/dynamic/RequestPermissionActivity.kt
new file mode 100644
index 0000000..037c838
--- /dev/null
+++ b/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/dynamic/RequestPermissionActivity.kt
@@ -0,0 +1,62 @@
+/*
+ * 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.watchface.complications.datasource.samples.dynamic
+
+import android.Manifest.permission
+import android.app.Activity
+import android.content.pm.PackageManager.PERMISSION_GRANTED
+import android.os.Bundle
+
+class RequestPermissionActivity : Activity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ val permission =
+ requireNotNull(ACTION_TO_PERMISSION[intent.action]) {
+ "Unknown action: ${intent.action}"
+ }
+ if (checkSelfPermission(permission) == PERMISSION_GRANTED) {
+ setResult(RESULT_OK)
+ finish()
+ return
+ }
+ requestPermissions(arrayOf(permission), 0)
+ }
+
+ override fun onRequestPermissionsResult(
+ requestCode: Int,
+ permissions: Array<out String>,
+ grantResults: IntArray
+ ) {
+ if (grantResults contentEquals intArrayOf(PERMISSION_GRANTED)) {
+ setResult(RESULT_OK)
+ } else {
+ setResult(RESULT_CANCELED)
+ }
+ finish()
+ }
+
+ companion object {
+ private val ACTION_TO_PERMISSION: Map<String, String> =
+ mapOf(
+ "androidx.wear.watchface.complications.datasource.samples.dynamic.REQUEST_ACTIVITY_RECOGNITION_PERMISSION" to // ktlint-disable max-line-length
+ permission.ACTIVITY_RECOGNITION,
+ "androidx.wear.watchface.complications.datasource.samples.dynamic.REQUEST_BODY_SENSORS_PERMISSION" to // ktlint-disable max-line-length
+ permission.BODY_SENSORS,
+ )
+ }
+}
diff --git a/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/dynamic/StepsDataSourceService.kt b/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/dynamic/StepsDataSourceService.kt
new file mode 100644
index 0000000..d03179c
--- /dev/null
+++ b/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/dynamic/StepsDataSourceService.kt
@@ -0,0 +1,92 @@
+/*
+ * 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.watchface.complications.datasource.samples.dynamic
+
+import android.Manifest.permission
+import android.content.pm.PackageManager.PERMISSION_GRANTED
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat
+import androidx.wear.protolayout.expression.PlatformHealthSources
+import androidx.wear.watchface.complications.data.ComplicationData
+import androidx.wear.watchface.complications.data.ComplicationType
+import androidx.wear.watchface.complications.data.DynamicComplicationText
+import androidx.wear.watchface.complications.data.PlainComplicationText
+import androidx.wear.watchface.complications.data.RangedValueComplicationData
+import androidx.wear.watchface.complications.datasource.ComplicationDataSourceService
+import androidx.wear.watchface.complications.datasource.ComplicationRequest
+
+class StepsDataSourceService : ComplicationDataSourceService() {
+ override fun onComplicationRequest(
+ request: ComplicationRequest,
+ listener: ComplicationRequestListener
+ ) {
+ val fallbackText = PlainComplicationText.Builder("--").build()
+
+ if (checkSelfPermission(permission.ACTIVITY_RECOGNITION) != PERMISSION_GRANTED) {
+ listener.onComplicationData(
+ RangedValueComplicationData.Builder(
+ value = 0f,
+ min = 0f,
+ max = 1000f,
+ contentDescription = fallbackText,
+ )
+ .setText(fallbackText)
+ .build()
+ )
+ return
+ }
+
+ val value = PlatformHealthSources.dailySteps()
+ val text = DynamicComplicationText(value.format(), "--")
+
+ listener.onComplicationData(
+ RangedValueComplicationData.Builder(
+ dynamicValue =
+ DynamicFloat.onCondition(value.gt(1000))
+ .use(DynamicFloat.constant(1000f))
+ .elseUse(value.asFloat()),
+ fallbackValue = 0f,
+ min = 0f,
+ max = 1000f,
+ contentDescription = text,
+ )
+ .setText(text)
+ .setDynamicValueInvalidationFallback(
+ RangedValueComplicationData.Builder(
+ value = 0f,
+ min = 0f,
+ max = 200f,
+ contentDescription = fallbackText,
+ )
+ .setText(fallbackText)
+ .build()
+ )
+ .build()
+ )
+ }
+
+ override fun getPreviewData(type: ComplicationType): ComplicationData {
+ val text = PlainComplicationText.Builder("123").build()
+ return RangedValueComplicationData.Builder(
+ value = 123f,
+ min = 0f,
+ max = 1000f,
+ contentDescription = text,
+ )
+ .setText(text)
+ .build()
+ }
+}
diff --git a/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/dynamic/TimeDataSourceService.kt b/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/dynamic/TimeDataSourceService.kt
new file mode 100644
index 0000000..5e9ccf8
--- /dev/null
+++ b/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/dynamic/TimeDataSourceService.kt
@@ -0,0 +1,72 @@
+/*
+ * 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.watchface.complications.datasource.samples.dynamic
+
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString
+import androidx.wear.watchface.complications.data.ComplicationData
+import androidx.wear.watchface.complications.data.ComplicationType
+import androidx.wear.watchface.complications.data.DynamicComplicationText
+import androidx.wear.watchface.complications.data.PlainComplicationText
+import androidx.wear.watchface.complications.data.RangedValueComplicationData
+import androidx.wear.watchface.complications.datasource.ComplicationDataSourceService
+import androidx.wear.watchface.complications.datasource.ComplicationRequest
+import java.time.Instant.EPOCH
+
+class TimeDataSourceService : ComplicationDataSourceService() {
+ override fun onComplicationRequest(
+ request: ComplicationRequest,
+ listener: ComplicationRequestListener
+ ) {
+ val epochDuration: DynamicDuration =
+ DynamicInstant.withSecondsPrecision(EPOCH)
+ .durationUntil(DynamicInstant.platformTimeWithSecondsPrecision())
+ val text =
+ DynamicComplicationText(
+ epochDuration.minutesPart
+ .format()
+ .concat(DynamicString.constant(":"))
+ .concat(epochDuration.secondsPart.format()),
+ "--"
+ )
+
+ listener.onComplicationData(
+ RangedValueComplicationData.Builder(
+ dynamicValue = epochDuration.secondsPart.rem(10f),
+ fallbackValue = 0f,
+ min = 0f,
+ max = 9f,
+ contentDescription = text,
+ )
+ .setText(text)
+ .build()
+ )
+ }
+
+ override fun getPreviewData(type: ComplicationType): ComplicationData {
+ val text = PlainComplicationText.Builder("12:42").build()
+ return RangedValueComplicationData.Builder(
+ value = 2f,
+ min = 0f,
+ max = 9f,
+ contentDescription = text,
+ )
+ .setText(text)
+ .build()
+ }
+}
diff --git a/wear/watchface/watchface-complications-data-source-samples/src/main/res/values/strings.xml b/wear/watchface/watchface-complications-data-source-samples/src/main/res/values/strings.xml
index 84c8731..e5b107f 100644
--- a/wear/watchface/watchface-complications-data-source-samples/src/main/res/values/strings.xml
+++ b/wear/watchface/watchface-complications-data-source-samples/src/main/res/values/strings.xml
@@ -26,6 +26,9 @@
<string name="color_ramp2_data_source_name" translatable="false">Non interpolated color ramp</string>
<string name="goal_progress_data_source_name" translatable="false">Goal Progress</string>
<string name="weighted_elements_data_source_name" translatable="false">Weighted Elements</string>
+ <string name="dynamic_time_data_source_name" translatable="false">Example Dynamic Time</string>
+ <string name="dynamic_heart_rate_data_source_name" translatable="false">Example Dynamic Heart Rate</string>
+ <string name="dynamic_steps_data_source_name" translatable="false">Example Dynamic Steps</string>
<string name="config_title" translatable="false">Configuration</string>
<string name="config_button_title" translatable="false">Generate</string>
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataEvaluator.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataEvaluator.kt
index 7aee659..c26aa5e 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataEvaluator.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataEvaluator.kt
@@ -43,15 +43,12 @@
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.emitAll
-import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flow
-import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapNotNull
-import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.update
-import kotlinx.coroutines.flow.updateAndGet
import kotlinx.coroutines.invoke
import kotlinx.coroutines.launch
@@ -125,17 +122,21 @@
) -> WireComplicationData.Builder,
): Flow<WireComplicationData> {
if (unevaluatedEntries.isNullOrEmpty()) return this
- val evaluatedEntriesFlow: Flow<List<WireComplicationData>> =
- combine(unevaluatedEntries.map { evaluate(it) })
+ val evaluatedEntriesFlow: Flow<Array<WireComplicationData>> =
+ combine(unevaluatedEntries.map { evaluate(it) }) { it }
- return this.combine(evaluatedEntriesFlow).map {
- (data: WireComplicationData, evaluatedEntries: List<WireComplicationData>?) ->
+ return this.combine(evaluatedEntriesFlow) {
+ data: WireComplicationData,
+ evaluatedEntries: Array<WireComplicationData> ->
+
// Not mutating if invalid.
- if (data === INVALID_DATA) return@map data
+ if (data === INVALID_DATA) return@combine data
// An entry is invalid, emitting invalid.
- if (evaluatedEntries.any { it === INVALID_DATA }) return@map INVALID_DATA
+ if (evaluatedEntries.any { it === INVALID_DATA }) return@combine INVALID_DATA
// All is well, mutating the input.
- return@map WireComplicationData.Builder(data).setter(evaluatedEntries).build()
+ return@combine WireComplicationData.Builder(data)
+ .setter(evaluatedEntries.toList())
+ .build()
}
}
@@ -152,17 +153,18 @@
if (unevaluatedPlaceholder == null) return this
val evaluatedPlaceholderFlow: Flow<WireComplicationData> = evaluate(unevaluatedPlaceholder)
- return this.combine(evaluatedPlaceholderFlow).map {
- (data: WireComplicationData, evaluatedPlaceholder: WireComplicationData?) ->
+ return this.combine(evaluatedPlaceholderFlow) {
+ data: WireComplicationData,
+ evaluatedPlaceholder: WireComplicationData ->
if (!keepDynamicValues && data.type != TYPE_NO_DATA) {
// Clearing the placeholder when data is not TYPE_NO_DATA (it was meant as an
// dynamic value fallback).
- return@map WireComplicationData.Builder(data).setPlaceholder(null).build()
+ return@combine WireComplicationData.Builder(data).setPlaceholder(null).build()
}
// Placeholder required but invalid, emitting invalid.
- if (evaluatedPlaceholder === INVALID_DATA) return@map INVALID_DATA
+ if (evaluatedPlaceholder === INVALID_DATA) return@combine INVALID_DATA
// All is well, mutating the input.
- return@map WireComplicationData.Builder(data)
+ return@combine WireComplicationData.Builder(data)
.setPlaceholder(evaluatedPlaceholder)
.build()
}
@@ -299,22 +301,26 @@
DynamicTypeEvaluator.Config.Builder()
.apply { stateStore?.let { setStateStore(it) } }
.apply { timeGateway?.let { setTimeGateway(it) } }
- .apply { sensorGateway?.let {
- addPlatformDataProvider(
- SensorGatewaySingleDataProvider(
- sensorGateway, PlatformHealthSources.Keys.HEART_RATE_BPM
- ),
- Collections.singleton(PlatformHealthSources.Keys.HEART_RATE_BPM)
- as Set<PlatformDataKey<*>>
- )
- addPlatformDataProvider(
- SensorGatewaySingleDataProvider(
- sensorGateway, PlatformHealthSources.Keys.DAILY_STEPS
- ),
- Collections.singleton(PlatformHealthSources.Keys.DAILY_STEPS)
- as Set<PlatformDataKey<*>>
- )
- } }
+ .apply {
+ sensorGateway?.let {
+ addPlatformDataProvider(
+ SensorGatewaySingleDataProvider(
+ sensorGateway,
+ PlatformHealthSources.Keys.HEART_RATE_BPM
+ ),
+ Collections.singleton(PlatformHealthSources.Keys.HEART_RATE_BPM)
+ as Set<PlatformDataKey<*>>
+ )
+ addPlatformDataProvider(
+ SensorGatewaySingleDataProvider(
+ sensorGateway,
+ PlatformHealthSources.Keys.DAILY_STEPS
+ ),
+ Collections.singleton(PlatformHealthSources.Keys.DAILY_STEPS)
+ as Set<PlatformDataKey<*>>
+ )
+ }
+ }
.build()
)
try {
@@ -413,35 +419,3 @@
runnable.run()
}
}
-
-/** Replacement of [kotlinx.coroutines.flow.combine], which doesn't seem to work. */
-internal fun <T> combine(flows: List<Flow<T>>): Flow<List<T>> = flow {
- data class ValueExists(val value: T?, val exists: Boolean)
- val latest = MutableStateFlow(List(flows.size) { ValueExists(null, false) })
- @Suppress("UNCHECKED_CAST") // Flow<List<T?>> -> Flow<List<T>> safe after filtering exists.
- emitAll(
- flows
- .mapIndexed { i, flow -> flow.map { i to it } } // List<Flow<Int, T>> (indexed flows)
- .merge() // Flow<Int, T>
- .map { (i, value) ->
- // Updating latest and returning the current latest.
- latest.updateAndGet {
- val newLatest = it.toMutableList()
- newLatest[i] = ValueExists(value, true)
- newLatest
- }
- } // Flow<List<ValueExists>>
- // Filtering emissions until we have all values.
- .filter { values -> values.all { it.exists } }
- // Flow<List<T>> + defensive copy.
- .map { values -> values.map { it.value } } as Flow<List<T>>
- )
-}
-
-/**
- * Another replacement of [kotlinx.coroutines.flow.combine] which is similar to
- * `combine(List<Flow<T>>)` but allows different types for each flow.
- */
-@Suppress("UNCHECKED_CAST")
-internal fun <T1, T2> Flow<T1>.combine(other: Flow<T2>): Flow<Pair<T1, T2>> =
- combine(listOf(this as Flow<*>, other as Flow<*>)).map { (a, b) -> (a as T1) to (b as T2) }
diff --git a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataEvaluatorTest.kt b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataEvaluatorTest.kt
index 01fdd1e..289c1f5 100644
--- a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataEvaluatorTest.kt
+++ b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataEvaluatorTest.kt
@@ -32,13 +32,17 @@
import com.google.common.truth.Expect
import com.google.common.truth.Truth.assertThat
import java.time.Instant
+import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.shareIn
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.TestDispatcher
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -54,6 +58,9 @@
class ComplicationDataEvaluatorTest {
@get:Rule val expect = Expect.create()
+ @OptIn(ExperimentalCoroutinesApi::class) // StandardTestDispatcher no longer experimental.
+ private val dispatcher: CoroutineDispatcher = StandardTestDispatcher()
+
@Before
fun setup() {
ShadowLog.setLoggable("ComplicationData", Log.DEBUG)
@@ -300,13 +307,15 @@
evaluator
.evaluate(expressed)
.shareIn(
- CoroutineScope(Dispatchers.Main.immediate),
+ CoroutineScope(dispatcher),
SharingStarted.Eagerly,
replay = 10,
)
+ advanceUntilIdle()
for (state in scenario.states) {
stateStore.setAppStateEntryValues(state)
+ advanceUntilIdle()
}
expect
@@ -410,6 +419,11 @@
)
}
+ private fun advanceUntilIdle() {
+ @OptIn(ExperimentalCoroutinesApi::class) // StandardTestDispatcher no longer experimental.
+ (dispatcher as TestDispatcher).scheduler.advanceUntilIdle()
+ }
+
private companion object {
/** Converts `[{a: A}, {b: B}, {c: C}]` to `[{a: A}, {a: A, b: B}, {a: A, b: B, c: C}]`. */
fun <K, V> aggregate(vararg maps: Map<K, V>): List<Map<K, V>> =
diff --git a/window/extensions/extensions/api/current.txt b/window/extensions/extensions/api/current.txt
index 490edb0..20f4ee8 100644
--- a/window/extensions/extensions/api/current.txt
+++ b/window/extensions/extensions/api/current.txt
@@ -16,13 +16,31 @@
package androidx.window.extensions.area {
+ public interface ExtensionWindowAreaPresentation {
+ method public android.content.Context getPresentationContext();
+ method public void setPresentationView(android.view.View);
+ }
+
+ public interface ExtensionWindowAreaStatus {
+ method public android.util.DisplayMetrics getWindowAreaDisplayMetrics();
+ method public int getWindowAreaStatus();
+ }
+
public interface WindowAreaComponent {
+ method public default void addRearDisplayPresentationStatusListener(androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.area.ExtensionWindowAreaStatus!>);
method public void addRearDisplayStatusListener(androidx.window.extensions.core.util.function.Consumer<java.lang.Integer!>);
+ method public default void endRearDisplayPresentationSession();
method public void endRearDisplaySession();
+ method public default android.util.DisplayMetrics getRearDisplayMetrics();
+ method public default androidx.window.extensions.area.ExtensionWindowAreaPresentation? getRearDisplayPresentation();
+ method public default void removeRearDisplayPresentationStatusListener(androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.area.ExtensionWindowAreaStatus!>);
method public void removeRearDisplayStatusListener(androidx.window.extensions.core.util.function.Consumer<java.lang.Integer!>);
+ method public default void startRearDisplayPresentationSession(android.app.Activity, androidx.window.extensions.core.util.function.Consumer<java.lang.Integer!>);
method public void startRearDisplaySession(android.app.Activity, androidx.window.extensions.core.util.function.Consumer<java.lang.Integer!>);
field public static final int SESSION_STATE_ACTIVE = 1; // 0x1
+ field public static final int SESSION_STATE_CONTENT_VISIBLE = 2; // 0x2
field public static final int SESSION_STATE_INACTIVE = 0; // 0x0
+ field public static final int STATUS_ACTIVE = 3; // 0x3
field public static final int STATUS_AVAILABLE = 2; // 0x2
field public static final int STATUS_UNAVAILABLE = 1; // 0x1
field public static final int STATUS_UNSUPPORTED = 0; // 0x0
diff --git a/window/extensions/extensions/api/restricted_current.txt b/window/extensions/extensions/api/restricted_current.txt
index 490edb0..20f4ee8 100644
--- a/window/extensions/extensions/api/restricted_current.txt
+++ b/window/extensions/extensions/api/restricted_current.txt
@@ -16,13 +16,31 @@
package androidx.window.extensions.area {
+ public interface ExtensionWindowAreaPresentation {
+ method public android.content.Context getPresentationContext();
+ method public void setPresentationView(android.view.View);
+ }
+
+ public interface ExtensionWindowAreaStatus {
+ method public android.util.DisplayMetrics getWindowAreaDisplayMetrics();
+ method public int getWindowAreaStatus();
+ }
+
public interface WindowAreaComponent {
+ method public default void addRearDisplayPresentationStatusListener(androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.area.ExtensionWindowAreaStatus!>);
method public void addRearDisplayStatusListener(androidx.window.extensions.core.util.function.Consumer<java.lang.Integer!>);
+ method public default void endRearDisplayPresentationSession();
method public void endRearDisplaySession();
+ method public default android.util.DisplayMetrics getRearDisplayMetrics();
+ method public default androidx.window.extensions.area.ExtensionWindowAreaPresentation? getRearDisplayPresentation();
+ method public default void removeRearDisplayPresentationStatusListener(androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.area.ExtensionWindowAreaStatus!>);
method public void removeRearDisplayStatusListener(androidx.window.extensions.core.util.function.Consumer<java.lang.Integer!>);
+ method public default void startRearDisplayPresentationSession(android.app.Activity, androidx.window.extensions.core.util.function.Consumer<java.lang.Integer!>);
method public void startRearDisplaySession(android.app.Activity, androidx.window.extensions.core.util.function.Consumer<java.lang.Integer!>);
field public static final int SESSION_STATE_ACTIVE = 1; // 0x1
+ field public static final int SESSION_STATE_CONTENT_VISIBLE = 2; // 0x2
field public static final int SESSION_STATE_INACTIVE = 0; // 0x0
+ field public static final int STATUS_ACTIVE = 3; // 0x3
field public static final int STATUS_AVAILABLE = 2; // 0x2
field public static final int STATUS_UNAVAILABLE = 1; // 0x1
field public static final int STATUS_UNSUPPORTED = 0; // 0x0
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/area/ExtensionWindowAreaPresentation.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/area/ExtensionWindowAreaPresentation.java
new file mode 100644
index 0000000..ddb8e8a
--- /dev/null
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/area/ExtensionWindowAreaPresentation.java
@@ -0,0 +1,44 @@
+/*
+ * 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.window.extensions.area;
+
+import android.content.Context;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+
+/**
+ * An interface representing a container in an extension window area in which app content can be
+ * shown.
+ *
+ * @since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_3}
+ * @see WindowAreaComponent#getRearDisplayPresentation()
+ */
+public interface ExtensionWindowAreaPresentation {
+
+ /**
+ * Returns the {@link Context} for the window that is being used
+ * to display the additional content provided from the application.
+ */
+ @NonNull
+ Context getPresentationContext();
+
+ /**
+ * Sets the {@link View} that the application wants to display in the extension window area.
+ */
+ void setPresentationView(@NonNull View view);
+}
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/area/ExtensionWindowAreaStatus.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/area/ExtensionWindowAreaStatus.java
new file mode 100644
index 0000000..2f521bc
--- /dev/null
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/area/ExtensionWindowAreaStatus.java
@@ -0,0 +1,44 @@
+/*
+ * 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.window.extensions.area;
+
+import android.util.DisplayMetrics;
+
+import androidx.annotation.NonNull;
+
+/**
+ * Interface to provide information around the current status of a window area feature.
+ *
+ * @since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_3}
+ * @see WindowAreaComponent#addRearDisplayPresentationStatusListener
+ */
+public interface ExtensionWindowAreaStatus {
+
+ /**
+ * Returns the {@link androidx.window.extensions.area.WindowAreaComponent.WindowAreaStatus}
+ * value that relates to the current status of a feature.
+ */
+ @WindowAreaComponent.WindowAreaStatus
+ int getWindowAreaStatus();
+
+ /**
+ * Returns the {@link DisplayMetrics} that corresponds to the window area that a feature
+ * interacts with. This is converted to size class information provided to developers.
+ */
+ @NonNull
+ DisplayMetrics getWindowAreaDisplayMetrics();
+}
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 21d5a95..e20584c 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
@@ -17,9 +17,11 @@
package androidx.window.extensions.area;
import android.app.Activity;
+import android.util.DisplayMetrics;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.window.extensions.WindowExtensions;
import androidx.window.extensions.core.util.function.Consumer;
@@ -40,11 +42,12 @@
* @see WindowExtensions#getWindowLayoutComponent()
*/
public interface WindowAreaComponent {
-
/**
* WindowArea status constant to signify that the feature is
* unsupported on this device. Could be due to the device not supporting that
* specific feature.
+ *
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
int STATUS_UNSUPPORTED = 0;
@@ -53,22 +56,35 @@
* currently unavailable but is supported on this device. This value could signify
* that the current device state does not support the specific feature or another
* process is currently enabled in that feature.
+ *
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
int STATUS_UNAVAILABLE = 1;
/**
* WindowArea status constant to signify that the feature is
* available to be entered or enabled.
+ *
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
int STATUS_AVAILABLE = 2;
+ /**
+ * WindowArea status constant to signify that the feature is
+ * already enabled.
+ *
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_3}
+ */
+ int STATUS_ACTIVE = 3;
+
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
@IntDef({
STATUS_UNSUPPORTED,
STATUS_UNAVAILABLE,
- STATUS_AVAILABLE
+ STATUS_AVAILABLE,
+ STATUS_ACTIVE
})
@interface WindowAreaStatus {}
@@ -80,19 +96,27 @@
int SESSION_STATE_INACTIVE = 0;
/**
- * Session state constant to represent that there is an
- * active session currently in progress. Used by the library to
- * know when to return the session object to the developer when the
- * session is created and active.
+ * Session state constant to represent that there is currently an active session. The library
+ * uses this state to know when a session is created and active. Note that this state is
+ * different from SESSION_STATE_CONTENT_VISIBLE, because the presentation content in this state
+ * is not visible.
*/
int SESSION_STATE_ACTIVE = 1;
+ /**
+ * Session state constant to represent that there is an
+ * active presentation session currently in progress, and the content provided by the
+ * application is visible.
+ */
+ int SESSION_STATE_CONTENT_VISIBLE = 2;
+
@RestrictTo(RestrictTo.Scope.LIBRARY)
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
@IntDef({
SESSION_STATE_ACTIVE,
- SESSION_STATE_INACTIVE
+ SESSION_STATE_INACTIVE,
+ SESSION_STATE_CONTENT_VISIBLE
})
@interface WindowAreaSessionState {}
@@ -106,21 +130,22 @@
* correspond to the [WindowAreaStatus] value that aligns with the current status
* of the rear display.
* @param consumer interested in receiving updates to WindowAreaStatus.
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
- void addRearDisplayStatusListener(@NonNull Consumer<@WindowAreaStatus Integer> consumer);
+ void addRearDisplayStatusListener(@NonNull Consumer<Integer> consumer);
/**
* Removes a listener no longer interested in receiving updates.
* @param consumer no longer interested in receiving updates to WindowAreaStatus
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
- void removeRearDisplayStatusListener(@NonNull Consumer<@WindowAreaStatus Integer> consumer);
+ void removeRearDisplayStatusListener(@NonNull Consumer<Integer> consumer);
/**
* Creates and starts a rear display session and sends state updates to the
* consumer provided. This consumer will receive a constant represented by
* [WindowAreaSessionState] to represent the state of the current rear display
- * session. We will translate the values from the {@link Consumer} to a developer-friendly
- * interface in the developer facing API.
+ * session. We will translate to a more friendly interface in the library.
*
* Because this is being called from the OEM provided extensions, the library
* will post the result of the listener on the executor provided by the developer.
@@ -133,7 +158,9 @@
* @throws UnsupportedOperationException if this method is called when RearDisplay
* mode is not available. This could be to an incompatible device state or when
* another process is currently in this mode.
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
+ @SuppressWarnings("ExecutorRegistration") // Jetpack will post it on the app-provided executor.
void startRearDisplaySession(@NonNull Activity activity,
@NonNull Consumer<@WindowAreaSessionState Integer> consumer);
@@ -141,6 +168,109 @@
* Ends a RearDisplaySession and sends [STATE_INACTIVE] to the consumer
* provided in the {@code startRearDisplaySession} method. This method is only
* called through the {@code RearDisplaySession} provided to the developer.
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
void endRearDisplaySession();
+
+ /**
+ * Adds a listener interested in receiving updates on the rear display presentation status
+ * of the device. Because this is being called from the OEM provided
+ * extensions, the library will post the result of the listener on the executor
+ * provided by the developer.
+ *
+ * The listener provided will receive {@link ExtensionWindowAreaStatus} values that
+ * correspond to the current status of the feature.
+ *
+ * @param consumer interested in receiving updates to {@link ExtensionWindowAreaStatus}.
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_3}
+ */
+ default void addRearDisplayPresentationStatusListener(
+ @NonNull Consumer<ExtensionWindowAreaStatus> consumer) {
+ throw new UnsupportedOperationException("This method must not be called unless there is a"
+ + " corresponding override implementation on the device.");
+ }
+
+ /**
+ * Removes a listener no longer interested in receiving updates.
+ *
+ * @param consumer no longer interested in receiving updates to WindowAreaStatus
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_3}
+ */
+ default void removeRearDisplayPresentationStatusListener(
+ @NonNull Consumer<ExtensionWindowAreaStatus> consumer) {
+ throw new UnsupportedOperationException("This method must not be called unless there is a"
+ + " corresponding override implementation on the device.");
+ }
+
+ /**
+ * Creates and starts a rear display presentation session and sends state updates to the
+ * consumer provided. This consumer will receive a constant represented by
+ * {@link WindowAreaSessionState} to represent the state of the current rear display
+ * session. We will translate to a more friendly interface in the library.
+ *
+ * Because this is being called from the OEM provided extensions, the library
+ * will post the result of the listener on the executor provided by the developer.
+ *
+ * Rear display presentation mode refers to a feature where an {@link Activity} can present
+ * additional content on a device with a second display that is facing the same direction
+ * as the rear camera (i.e. the cover display on a fold-in style device). The calling
+ * {@link Activity} stays on the user-facing display.
+ *
+ * @param activity that the OEM implementation will use as a base
+ * context and to identify the source display area of the request.
+ * The reference to the activity instance must not be stored in the OEM
+ * implementation to prevent memory leaks.
+ * @param consumer to provide updates to the client on the status of the session
+ * @throws UnsupportedOperationException if this method is called when rear display presentation
+ * mode is not available. This could be to an incompatible device state or when
+ * another process is currently in this mode.
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_3}
+ */
+ default void startRearDisplayPresentationSession(@NonNull Activity activity,
+ @NonNull Consumer<@WindowAreaSessionState Integer> consumer) {
+ throw new UnsupportedOperationException("This method must not be called unless there is a"
+ + " corresponding override implementation on the device.");
+ }
+
+ /**
+ * Ends the current rear display presentation session and provides updates to the
+ * callback provided. When this is ended, the presented content from the calling
+ * {@link Activity} will also be removed from the rear facing display.
+ * Because this is being called from the OEM provided extensions, the result of the listener
+ * will be posted on the executor provided by the developer at the initial call site.
+ *
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_3}
+ */
+ default void endRearDisplayPresentationSession() {
+ throw new UnsupportedOperationException("This method must not be called unless there is a"
+ + " corresponding override implementation on the device.");
+ }
+
+ /**
+ * Returns the {@link ExtensionWindowAreaPresentation} connected to the active
+ * rear display presentation session. If there is no session currently active, then it will
+ * return null.
+ *
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_3}
+ */
+ @Nullable
+ default ExtensionWindowAreaPresentation getRearDisplayPresentation() {
+ throw new UnsupportedOperationException("This method must not be called unless there is a"
+ + " corresponding override implementation on the device.");
+ }
+
+ /**
+ * Returns the {@link android.util.DisplayMetrics} associated with the rear facing display. If
+ * there is no rear facing display available on the device, returns an empty
+ * {@link android.util.DisplayMetrics} object.
+ *
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_3}
+ */
+ // TODO(b/273807238): Investigate how we can provide a listener to get runtime changes in
+ // rear display metrics to better support other form-factors in the future.
+ @NonNull
+ default DisplayMetrics getRearDisplayMetrics() {
+ throw new UnsupportedOperationException("This method must not be called unless there is a"
+ + " corresponding override implementation on the device.");
+ }
}
diff --git a/work/work-testing/api/current.txt b/work/work-testing/api/current.txt
index e6473bb..fda4ffa 100644
--- a/work/work-testing/api/current.txt
+++ b/work/work-testing/api/current.txt
@@ -46,8 +46,13 @@
method public static androidx.work.testing.TestDriver? getTestDriver(android.content.Context);
method public static void initializeTestWorkManager(android.content.Context);
method public static void initializeTestWorkManager(android.content.Context, androidx.work.Configuration);
- method public static void initializeTestWorkManagerWithRealExecutors(android.content.Context);
- method public static void initializeTestWorkManagerWithRealExecutors(android.content.Context, androidx.work.Configuration);
+ method public static void initializeTestWorkManager(android.content.Context, androidx.work.Configuration, androidx.work.testing.WorkManagerTestInitHelper.ExecutorsMode);
+ method public static void initializeTestWorkManager(android.content.Context, androidx.work.testing.WorkManagerTestInitHelper.ExecutorsMode);
+ }
+
+ public enum WorkManagerTestInitHelper.ExecutorsMode {
+ enum_constant public static final androidx.work.testing.WorkManagerTestInitHelper.ExecutorsMode LEGACY_OVERRIDE_WITH_SYNCHRONOUS_EXECUTORS;
+ enum_constant public static final androidx.work.testing.WorkManagerTestInitHelper.ExecutorsMode PRESERVE_EXECUTORS;
}
}
diff --git a/work/work-testing/api/restricted_current.txt b/work/work-testing/api/restricted_current.txt
index e6473bb..fda4ffa 100644
--- a/work/work-testing/api/restricted_current.txt
+++ b/work/work-testing/api/restricted_current.txt
@@ -46,8 +46,13 @@
method public static androidx.work.testing.TestDriver? getTestDriver(android.content.Context);
method public static void initializeTestWorkManager(android.content.Context);
method public static void initializeTestWorkManager(android.content.Context, androidx.work.Configuration);
- method public static void initializeTestWorkManagerWithRealExecutors(android.content.Context);
- method public static void initializeTestWorkManagerWithRealExecutors(android.content.Context, androidx.work.Configuration);
+ method public static void initializeTestWorkManager(android.content.Context, androidx.work.Configuration, androidx.work.testing.WorkManagerTestInitHelper.ExecutorsMode);
+ method public static void initializeTestWorkManager(android.content.Context, androidx.work.testing.WorkManagerTestInitHelper.ExecutorsMode);
+ }
+
+ public enum WorkManagerTestInitHelper.ExecutorsMode {
+ enum_constant public static final androidx.work.testing.WorkManagerTestInitHelper.ExecutorsMode LEGACY_OVERRIDE_WITH_SYNCHRONOUS_EXECUTORS;
+ enum_constant public static final androidx.work.testing.WorkManagerTestInitHelper.ExecutorsMode PRESERVE_EXECUTORS;
}
}
diff --git a/work/work-testing/src/androidTest/java/androidx/work/testing/TestSchedulerRealExecutorTest.kt b/work/work-testing/src/androidTest/java/androidx/work/testing/TestSchedulerRealExecutorTest.kt
index 78b5732..db35c0e 100644
--- a/work/work-testing/src/androidTest/java/androidx/work/testing/TestSchedulerRealExecutorTest.kt
+++ b/work/work-testing/src/androidTest/java/androidx/work/testing/TestSchedulerRealExecutorTest.kt
@@ -33,6 +33,7 @@
import androidx.work.impl.WorkManagerImpl
import androidx.work.impl.model.WorkSpec
import androidx.work.impl.utils.taskexecutor.SerialExecutor
+import androidx.work.testing.WorkManagerTestInitHelper.ExecutorsMode.PRESERVE_EXECUTORS
import androidx.work.testing.workers.CountingTestWorker
import androidx.work.testing.workers.RetryWorker
import androidx.work.testing.workers.TestWorker
@@ -49,7 +50,7 @@
val context = ApplicationProvider.getApplicationContext<Context>()
init {
- WorkManagerTestInitHelper.initializeTestWorkManagerWithRealExecutors(context)
+ WorkManagerTestInitHelper.initializeTestWorkManager(context, PRESERVE_EXECUTORS)
CountingTestWorker.COUNT.set(0)
}
diff --git a/work/work-testing/src/main/java/androidx/work/testing/WorkManagerTestInitHelper.java b/work/work-testing/src/main/java/androidx/work/testing/WorkManagerTestInitHelper.java
index 22155ed..8abaefb 100644
--- a/work/work-testing/src/main/java/androidx/work/testing/WorkManagerTestInitHelper.java
+++ b/work/work-testing/src/main/java/androidx/work/testing/WorkManagerTestInitHelper.java
@@ -17,6 +17,7 @@
package androidx.work.testing;
import static androidx.work.testing.TestWorkManagerImplKt.createTestWorkManagerImpl;
+import static androidx.work.testing.WorkManagerTestInitHelper.ExecutorsMode.LEGACY_OVERRIDE_WITH_SYNCHRONOUS_EXECUTORS;
import android.content.Context;
@@ -57,48 +58,82 @@
public static void initializeTestWorkManager(
@NonNull Context context,
@NonNull Configuration configuration) {
+ initializeTestWorkManager(context, configuration,
+ LEGACY_OVERRIDE_WITH_SYNCHRONOUS_EXECUTORS);
+ }
- // Check if the configuration being used has overridden the task executor. If not,
- // swap to SynchronousExecutor. This is to preserve existing behavior.
- SerialExecutor serialExecutor;
- if (configuration.isUsingDefaultTaskExecutor()) {
- Configuration.Builder builder = new Configuration.Builder(configuration)
- .setTaskExecutor(new SynchronousExecutor());
- configuration = builder.build();
- serialExecutor = new SynchronousSerialExecutor();
+ /**
+ * Modes that control which executors are used in tests.
+ */
+ public enum ExecutorsMode {
+ /**
+ * Use executors as they are configured in passed {@link Configuration} and preserving
+ * real main thread.
+ */
+ PRESERVE_EXECUTORS,
+
+ /**
+ * Preserve old behavior of {@link #initializeTestWorkManager(Context)} and
+ * {@link #initializeTestWorkManager(Context, Configuration)}.
+ *
+ * <p> In this mode {@link SynchronousExecutor} is used instead of main thread. Similarly,
+ * {@link SynchronousExecutor} is used as {@link Configuration#getTaskExecutor()}, unless
+ * {@link Configuration#getTaskExecutor()} was explicitly set in {@code configuration}
+ * passed in {@link #initializeTestWorkManager(Context, Configuration, ExecutorsMode)}
+ */
+ LEGACY_OVERRIDE_WITH_SYNCHRONOUS_EXECUTORS
+ }
+
+ /**
+ * Initializes a test {@link androidx.work.WorkManager} that can be controlled via {@link
+ * TestDriver}.
+ *
+ * @param context The application {@link Context}
+ * @param configuration test configuration of WorkManager
+ * @param executorsMode mode controlling executors used by WorkManager in tests. See
+ * documentation of modes in {@link ExecutorsMode}
+ */
+ public static void initializeTestWorkManager(@NonNull Context context,
+ @NonNull Configuration configuration, @NonNull ExecutorsMode executorsMode) {
+ WorkManagerImpl workManager;
+ if (executorsMode == LEGACY_OVERRIDE_WITH_SYNCHRONOUS_EXECUTORS) {
+ SerialExecutor serialExecutor;
+ if (configuration.isUsingDefaultTaskExecutor()) {
+ Configuration.Builder builder = new Configuration.Builder(configuration)
+ .setTaskExecutor(new SynchronousExecutor());
+ configuration = builder.build();
+ serialExecutor = new SynchronousSerialExecutor();
+ } else {
+ serialExecutor = new SerialExecutorImpl(configuration.getTaskExecutor());
+ }
+ workManager = createTestWorkManagerImpl(context, configuration, serialExecutor);
} else {
- serialExecutor = new SerialExecutorImpl(configuration.getTaskExecutor());
+ workManager = createTestWorkManagerImpl(context, configuration);
}
-
- WorkManagerImpl.setDelegate(
- createTestWorkManagerImpl(context, configuration, serialExecutor)
- );
+ WorkManagerImpl.setDelegate(workManager);
}
/**
- * Initializes a test {@link androidx.work.WorkManager} with a default configuration and
- * real threading unlike {@link #initializeTestWorkManager(Context)} that uses a
- * {@link SynchronousExecutor} as main thread and both executors
- * (see {@link Configuration#getTaskExecutor()} and {@link Configuration#getExecutor()}).
+ * Initializes a test {@link androidx.work.WorkManager} that can be controlled via {@link
+ * TestDriver}.
*
* @param context The application {@link Context}
+ * @param executorsMode mode controlling executors used by WorkManager in tests. See
+ * documentation of modes in {@link ExecutorsMode}
*/
- public static void initializeTestWorkManagerWithRealExecutors(@NonNull Context context) {
- Configuration configuration = new Configuration.Builder().build();
- WorkManagerImpl.setDelegate(createTestWorkManagerImpl(context, configuration));
- }
-
- /**
- * Initializes a test {@link androidx.work.WorkManager} with a default configuration and
- * real threading unlike {@link #initializeTestWorkManager(Context, Configuration)} that uses a
- * {@link SynchronousExecutor} as main thread.
- *
- * @param context The application {@link Context}
- * @param configuration The {@link androidx.work.Configuration}
- */
- public static void initializeTestWorkManagerWithRealExecutors(
- @NonNull Context context, @NonNull Configuration configuration) {
- WorkManagerImpl.setDelegate(createTestWorkManagerImpl(context, configuration));
+ public static void initializeTestWorkManager(@NonNull Context context,
+ @NonNull ExecutorsMode executorsMode) {
+ Configuration configuration;
+ if (executorsMode == LEGACY_OVERRIDE_WITH_SYNCHRONOUS_EXECUTORS) {
+ SynchronousExecutor synchronousExecutor = new SynchronousExecutor();
+ configuration = new Configuration.Builder()
+ .setExecutor(synchronousExecutor)
+ .setTaskExecutor(synchronousExecutor)
+ .build();
+ } else {
+ configuration = new Configuration.Builder().build();
+ }
+ initializeTestWorkManager(context, configuration, executorsMode);
}
/**