Merge "Add dynamic range to StreamSpec" into androidx-main
diff --git a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateCall.kt b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateCall.kt
index 7ba900e..0aea3b2 100644
--- a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateCall.kt
+++ b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateCall.kt
@@ -28,8 +28,8 @@
import androidx.appactions.interaction.capabilities.core.values.Call
import androidx.appactions.interaction.capabilities.core.values.Call.CallFormat
import androidx.appactions.interaction.capabilities.core.values.GenericErrorStatus
-import androidx.appactions.interaction.capabilities.core.values.SuccessStatus
import androidx.appactions.interaction.capabilities.core.values.properties.Participant
+import androidx.appactions.interaction.capabilities.core.values.SuccessStatus
import androidx.appactions.interaction.proto.ParamValue
import androidx.appactions.interaction.protobuf.Struct
import androidx.appactions.interaction.protobuf.Value
@@ -42,18 +42,18 @@
.setDescriptor(CreateCall.Property::class.java)
.setArgument(CreateCall.Argument::class.java, CreateCall.Argument::Builder)
.setOutput(CreateCall.Output::class.java)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"call.callFormat",
{ property -> Optional.ofNullable(property.callFormat) },
CreateCall.Argument.Builder::setCallFormat,
TypeConverters::toCallFormat,
TypeConverters::toEntity
)
- .bindRepeatedGenericParameter(
+ .bindRepeatedParameter(
"call.participant",
{ property -> Optional.ofNullable(property.participant) },
CreateCall.Argument.Builder::setParticipantList,
- TypeConverters::toParticipant,
+ ParticipantValue.FROM_PARAM_VALUE,
TypeConverters::toEntity
)
.bindOptionalOutput(
@@ -124,7 +124,10 @@
}
class Argument
- internal constructor(val callFormat: CallFormat?, val participantList: List<Participant>) {
+ internal constructor(
+ val callFormat: CallFormat?,
+ val participantList: List<ParticipantValue>,
+ ) {
override fun toString(): String {
return "Argument(callFormat=$callFormat, participantList=$participantList)"
}
@@ -149,13 +152,13 @@
class Builder : BuilderOf<Argument> {
private var callFormat: CallFormat? = null
- private var participantList: List<Participant> = mutableListOf()
+ private var participantList: List<ParticipantValue> = mutableListOf()
fun setCallFormat(callFormat: CallFormat): Builder = apply {
this.callFormat = callFormat
}
- fun setParticipantList(participantList: List<Participant>): Builder = apply {
+ fun setParticipantList(participantList: List<ParticipantValue>): Builder = apply {
this.participantList = participantList
}
diff --git a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateMessage.kt b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateMessage.kt
index 9a338bb..873b7ff 100644
--- a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateMessage.kt
+++ b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateMessage.kt
@@ -29,8 +29,8 @@
import androidx.appactions.interaction.capabilities.core.task.impl.AbstractTaskUpdater
import androidx.appactions.interaction.capabilities.core.values.GenericErrorStatus
import androidx.appactions.interaction.capabilities.core.values.Message
-import androidx.appactions.interaction.capabilities.core.values.SuccessStatus
import androidx.appactions.interaction.capabilities.core.values.properties.Recipient
+import androidx.appactions.interaction.capabilities.core.values.SuccessStatus
import androidx.appactions.interaction.proto.ParamValue
import androidx.appactions.interaction.protobuf.Struct
import androidx.appactions.interaction.protobuf.Value
@@ -43,14 +43,14 @@
.setDescriptor(CreateMessage.Property::class.java)
.setArgument(CreateMessage.Argument::class.java, CreateMessage.Argument::Builder)
.setOutput(CreateMessage.Output::class.java)
- .bindRepeatedGenericParameter(
+ .bindRepeatedParameter(
"message.recipient",
{ property -> Optional.ofNullable(property.recipient) },
CreateMessage.Argument.Builder::setRecipientList,
- TypeConverters::toRecipient,
+ RecipientValue.FROM_PARAM_VALUE,
TypeConverters::toEntity
)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"message.text",
{ property -> Optional.ofNullable(property.messageText) },
CreateMessage.Argument.Builder::setMessageText,
@@ -128,7 +128,7 @@
}
class Argument
- internal constructor(val recipientList: List<Recipient>, val messageText: String?) {
+ internal constructor(val recipientList: List<RecipientValue>, val messageText: String?) {
override fun toString(): String {
return "Argument(recipient=$recipientList, messageTextList=$messageText)"
}
@@ -152,10 +152,10 @@
}
class Builder : BuilderOf<Argument> {
- private var recipientList: List<Recipient> = mutableListOf()
+ private var recipientList: List<RecipientValue> = mutableListOf()
private var messageText: String? = null
- fun setRecipientList(recipientList: List<Recipient>): Builder = apply {
+ fun setRecipientList(recipientList: List<RecipientValue>): Builder = apply {
this.recipientList = recipientList
}
diff --git a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/ParticipantValue.kt b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/ParticipantValue.kt
new file mode 100644
index 0000000..5e3dcf4
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/ParticipantValue.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.appactions.interaction.capabilities.communication
+
+import androidx.appactions.interaction.capabilities.core.impl.converters.ParamValueConverter
+import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
+import androidx.appactions.interaction.capabilities.core.impl.converters.UnionTypeSpec
+import androidx.appactions.interaction.capabilities.core.values.SearchAction
+import androidx.appactions.interaction.capabilities.core.values.properties.Participant
+
+class ParticipantValue private constructor(
+ val asParticipant: Participant?,
+ val asParticipantFilter: SearchAction<Participant>?,
+) {
+ constructor(participant: Participant) : this(participant, null)
+
+ // TODO(b/268071906) add ParticipantFilter type to SearchAction
+ constructor(participantFilter: SearchAction<Participant>) : this(null, participantFilter)
+
+ companion object {
+ private val TYPE_SPEC = UnionTypeSpec.Builder<ParticipantValue>()
+ .bindMemberType(
+ memberGetter = ParticipantValue::asParticipant,
+ ctor = { ParticipantValue(it) },
+ typeSpec = TypeConverters.PARTICIPANT_TYPE_SPEC,
+ )
+ .bindMemberType(
+ memberGetter = ParticipantValue::asParticipantFilter,
+ ctor = { ParticipantValue(it) },
+ typeSpec = TypeConverters.createSearchActionTypeSpec(
+ TypeConverters.PARTICIPANT_TYPE_SPEC,
+ ),
+ )
+ .build()
+
+ internal val FROM_PARAM_VALUE = ParamValueConverter {
+ TYPE_SPEC.fromStruct(it.getStructValue())
+ }
+ }
+}
diff --git a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/RecipientValue.kt b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/RecipientValue.kt
new file mode 100644
index 0000000..637f6b5
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/RecipientValue.kt
@@ -0,0 +1,54 @@
+/*
+ * 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.interaction.capabilities.communication
+
+import androidx.appactions.interaction.capabilities.core.impl.converters.ParamValueConverter
+import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
+import androidx.appactions.interaction.capabilities.core.impl.converters.UnionTypeSpec
+import androidx.appactions.interaction.capabilities.core.values.SearchAction
+import androidx.appactions.interaction.capabilities.core.values.properties.Recipient
+
+class RecipientValue private constructor(
+ val asRecipient: Recipient?,
+ val asRecipientFilter: SearchAction<Recipient>?,
+) {
+ constructor(recipient: Recipient) : this(recipient, null)
+
+ // TODO(b/268071906) add RecipientFilter type to SearchAction
+ constructor(recipientFilter: SearchAction<Recipient>) : this(null, recipientFilter)
+
+ companion object {
+ private val TYPE_SPEC = UnionTypeSpec.Builder<RecipientValue>()
+ .bindMemberType(
+ memberGetter = RecipientValue::asRecipient,
+ ctor = { RecipientValue(it) },
+ typeSpec = TypeConverters.RECIPIENT_TYPE_SPEC,
+ )
+ .bindMemberType(
+ memberGetter = RecipientValue::asRecipientFilter,
+ ctor = { RecipientValue(it) },
+ typeSpec = TypeConverters.createSearchActionTypeSpec(
+ TypeConverters.RECIPIENT_TYPE_SPEC,
+ ),
+ )
+ .build()
+
+ internal val FROM_PARAM_VALUE = ParamValueConverter {
+ TYPE_SPEC.fromStruct(it.getStructValue())
+ }
+ }
+}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/Attendee.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/Attendee.kt
new file mode 100644
index 0000000..6934635
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/Attendee.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appactions.builtintypes.properties
+
+import androidx.appactions.builtintypes.types.Person
+
+/**
+ * Represents the value of the union property: http://schema.org/attendee, currently it only can
+ * contain {@link Person}.
+ */
+class Attendee(person: Person) {
+ @get:JvmName("asPerson")
+ val asPerson: Person? = person
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/CallFormat.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/CallFormat.kt
new file mode 100644
index 0000000..e1b072d
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/CallFormat.kt
@@ -0,0 +1,17 @@
+
+package androidx.appactions.builtintypes.properties
+
+class CallFormat private constructor(
+ val asText: String?,
+ val asCanonicalValue: CanonicalValue?,
+) {
+
+ constructor(text: String) : this(asText = text, asCanonicalValue = null)
+
+ constructor(canonicalValue: CanonicalValue) : this(
+ asText = null,
+ asCanonicalValue = canonicalValue
+ )
+
+ abstract class CanonicalValue internal constructor(val textValue: String)
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/Participant.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/Participant.kt
new file mode 100644
index 0000000..f044bbf
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/Participant.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appactions.builtintypes.properties
+
+import androidx.appactions.builtintypes.types.Person
+
+/**
+ * Represents the value of the union property: http://schema.org/participant, currently it only can
+ * contain {@link Person}.
+ */
+class Participant(person: Person) {
+ @get:JvmName("asPerson")
+ val asPerson: Person? = person
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/Recipient.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/Recipient.kt
new file mode 100644
index 0000000..186878a
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/Recipient.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appactions.builtintypes.properties
+
+import androidx.appactions.builtintypes.types.Person
+
+/**
+ * Represents the value of the union property: http://schema.org/recipient, currently it only can
+ * contain {@link Person}.
+ */
+class Recipient(person: Person) {
+ @get:JvmName("asPerson")
+ val asPerson: Person? = person
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/Text.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/Text.kt
new file mode 100644
index 0000000..4b1e628
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/properties/Text.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appactions.builtintypes.properties
+
+class Text(asText: String) {
+ @get:JvmName("asText")
+ val asText: String = asText
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/CalendarEvent.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/CalendarEvent.kt
index abd0fe1..e5cf454 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/CalendarEvent.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/CalendarEvent.kt
@@ -20,7 +20,7 @@
import androidx.appactions.builtintypes.properties.EndDate
import androidx.appactions.builtintypes.properties.Name
import androidx.appactions.builtintypes.properties.StartDate
-import androidx.appactions.interaction.capabilities.core.values.properties.Attendee
+import androidx.appactions.builtintypes.properties.Attendee
import java.time.LocalDate
interface CalendarEvent : Thing {
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/Call.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/Call.kt
new file mode 100644
index 0000000..2567dea
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/Call.kt
@@ -0,0 +1,112 @@
+/*
+ * 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.CallFormat
+import androidx.appactions.builtintypes.properties.Name
+import androidx.appactions.builtintypes.properties.Participant
+
+interface Call : Thing {
+ val callFormat: CallFormat?
+ val participantList: List<Participant>
+ override fun toBuilder(): Builder<*>
+
+ companion object {
+ @JvmStatic
+ fun Builder(): Builder<*> = CallBuilderImpl()
+ }
+
+ object CanonicalValue {
+ class CallFormat private constructor(textValue: String) :
+ androidx.appactions.builtintypes.properties.CallFormat.CanonicalValue(textValue) {
+ companion object {
+ @JvmField
+ val Audio = CallFormat("Audio")
+
+ @JvmField
+ val Video = CallFormat("Video")
+ }
+ }
+ }
+
+ interface Builder<Self : Builder<Self>> : Thing.Builder<Self> {
+ fun setCallFormat(callFormat: CallFormat?): Self
+ fun setCallFormat(canonicalValue: CanonicalValue.CallFormat): Self
+ fun setCallFormat(text: String): Self
+ fun addParticipant(person: Person): Self
+ fun addParticipant(participant: Participant): Self
+ fun addAllParticipant(value: Iterable<Participant>): Self
+
+ override fun build(): Call
+ }
+}
+
+private class CallBuilderImpl : Call.Builder<CallBuilderImpl> {
+
+ private var identifier: String? = null
+ private var name: Name? = null
+ private var callFormat: CallFormat? = null
+ private var participantList = mutableListOf<Participant>()
+
+ override fun build() = CallImpl(identifier, name, callFormat, participantList.toList())
+
+ override fun setCallFormat(callFormat: CallFormat?): CallBuilderImpl =
+ apply { this.callFormat = callFormat }
+
+ override fun setCallFormat(canonicalValue: Call.CanonicalValue.CallFormat): CallBuilderImpl =
+ apply {
+ this.callFormat = CallFormat(canonicalValue)
+ }
+
+ override fun setCallFormat(text: String): CallBuilderImpl = apply {
+ this.callFormat = CallFormat(text)
+ }
+
+ override fun addParticipant(person: Person): CallBuilderImpl = apply {
+ participantList.add(Participant(person))
+ }
+
+ override fun addParticipant(participant: Participant): CallBuilderImpl = apply {
+ participantList.add(participant)
+ }
+
+ override fun addAllParticipant(value: Iterable<Participant>): CallBuilderImpl = apply {
+ participantList.addAll(value)
+ }
+
+ override fun setIdentifier(text: String?): CallBuilderImpl = apply { identifier = text }
+
+ override fun setName(text: String): CallBuilderImpl = apply { name = Name(text) }
+
+ override fun setName(name: Name?): CallBuilderImpl = apply { this.name = name }
+
+ override fun clearName(): CallBuilderImpl = apply { name = null }
+}
+
+private class CallImpl(
+ override val identifier: String?,
+ override val name: Name?,
+ override val callFormat: CallFormat?,
+ override val participantList: List<Participant>
+) : Call {
+ override fun toBuilder(): Call.Builder<*> =
+ CallBuilderImpl()
+ .setIdentifier(identifier)
+ .setName(name)
+ .setCallFormat(callFormat)
+ .addAllParticipant(participantList)
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/CreativeWork.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/CreativeWork.kt
new file mode 100644
index 0000000..3d340ea
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/CreativeWork.kt
@@ -0,0 +1,73 @@
+/*
+ * 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.Name
+import androidx.appactions.builtintypes.properties.Text
+
+interface CreativeWork : Thing {
+ val text: Text?
+
+ override fun toBuilder(): Thing.Builder<*>
+
+ companion object {
+ @JvmStatic
+ fun Builder(): Thing.Builder<*> = CreativeWorkBuilderImpl()
+ }
+
+ interface Builder<Self : Builder<Self>> : Thing.Builder<Self> {
+ fun setText(text: Text?): Self
+ fun setText(text: String): Self
+
+ override fun build(): CreativeWork
+ }
+}
+
+private class CreativeWorkBuilderImpl : CreativeWork.Builder<CreativeWorkBuilderImpl> {
+ private var identifier: String? = null
+ private var name: Name? = null
+ private var text: Text? = null
+
+ override fun build() = CreateWorkImpl(text, identifier, name)
+
+ override fun setText(text: Text?): CreativeWorkBuilderImpl = apply { this.text = text }
+
+ override fun setText(text: String): CreativeWorkBuilderImpl = apply { this.text = Text(text) }
+
+ override fun setIdentifier(text: String?): CreativeWorkBuilderImpl = apply {
+ identifier = text
+ }
+
+ override fun setName(text: String): CreativeWorkBuilderImpl = apply { name = Name(text) }
+ override fun setName(name: Name?): CreativeWorkBuilderImpl = apply {
+ this.name = name
+ }
+
+ override fun clearName(): CreativeWorkBuilderImpl = apply { name = null }
+}
+
+private class CreateWorkImpl(
+ override val text: Text?,
+ override val identifier: String?,
+ override val name: Name?
+) : CreativeWork {
+ override fun toBuilder(): CreativeWork.Builder<*> =
+ CreativeWorkBuilderImpl()
+ .setIdentifier(identifier)
+ .setName(name)
+ .setText(text)
+}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/Message.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/Message.kt
new file mode 100644
index 0000000..2b1de7c
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/Message.kt
@@ -0,0 +1,87 @@
+/*
+ * 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.Name
+import androidx.appactions.builtintypes.properties.Recipient
+import androidx.appactions.builtintypes.properties.Text
+
+interface Message : Thing, CreativeWork {
+ val recipientList: List<Recipient>
+ override fun toBuilder(): Builder<*>
+
+ companion object {
+ @JvmStatic
+ fun Builder(): Builder<*> = MessageBuilderImpl()
+ }
+
+ interface Builder<Self : Builder<Self>> : Thing.Builder<Self>, CreativeWork.Builder<Self> {
+ fun addRecipient(person: Person): Self
+ fun addRecipient(recipient: Recipient): Self
+ fun addAllRecipient(value: Iterable<Recipient>): Self
+
+ override fun build(): Message
+ }
+}
+
+private class MessageBuilderImpl : Message.Builder<MessageBuilderImpl> {
+
+ private var identifier: String? = null
+ private var name: Name? = null
+ private var text: Text? = null
+ private var recipientList = mutableListOf<Recipient>()
+
+ override fun build() = MessageImpl(identifier, name, text, recipientList.toList())
+
+ override fun addRecipient(person: Person): MessageBuilderImpl = apply {
+ recipientList.add(Recipient(person))
+ }
+
+ override fun addRecipient(recipient: Recipient): MessageBuilderImpl = apply {
+ recipientList.add(recipient)
+ }
+
+ override fun addAllRecipient(value: Iterable<Recipient>): MessageBuilderImpl = apply {
+ recipientList.addAll(value)
+ }
+
+ override fun setIdentifier(text: String?): MessageBuilderImpl = apply { identifier = text }
+
+ override fun setName(text: String): MessageBuilderImpl = apply { name = Name(text) }
+
+ override fun setName(name: Name?): MessageBuilderImpl = apply { this.name = name }
+
+ override fun clearName(): MessageBuilderImpl = apply { name = null }
+
+ override fun setText(text: Text?): MessageBuilderImpl = apply { this.text = text }
+
+ override fun setText(text: String): MessageBuilderImpl = apply { this.text = Text(text) }
+}
+
+private class MessageImpl(
+ override val identifier: String?,
+ override val name: Name?,
+ override val text: Text?,
+ override val recipientList: List<Recipient>
+) : Message {
+ override fun toBuilder(): Message.Builder<*> =
+ MessageBuilderImpl()
+ .setIdentifier(identifier)
+ .setName(name)
+ .setText(text)
+ .addAllRecipient(recipientList)
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/Person.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/Person.kt
new file mode 100644
index 0000000..3e1105e
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/types/Person.kt
@@ -0,0 +1,75 @@
+/*
+ * 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.Name
+
+interface Person : Thing {
+ val email: String?
+ val telephone: String?
+
+ override fun toBuilder(): Builder<*>
+
+ companion object {
+ @JvmStatic
+ fun Builder(): Builder<*> = PersonBuilderImpl()
+ }
+
+ interface Builder<Self : Builder<Self>> : Thing.Builder<Builder<Self>> {
+ fun setEmail(email: String?): Self
+ fun setTelephone(telephone: String?): Self
+
+ override fun build(): Person
+ }
+}
+
+private class PersonBuilderImpl : Person.Builder<PersonBuilderImpl> {
+
+ private var identifier: String? = null
+ private var name: Name? = null
+ private var email: String? = null
+ private var telephone: String? = null
+
+ override fun setEmail(email: String?): PersonBuilderImpl = apply { this.email = email }
+
+ override fun setTelephone(telephone: String?): PersonBuilderImpl =
+ apply { this.telephone = telephone }
+
+ override fun build() = PersonImpl(identifier, name, email, telephone)
+
+ override fun setIdentifier(text: String?): PersonBuilderImpl = apply { identifier = text }
+
+ override fun setName(text: String): PersonBuilderImpl = apply { name = Name(text) }
+
+ override fun setName(name: Name?): PersonBuilderImpl = apply { this.name = name }
+
+ override fun clearName(): PersonBuilderImpl = apply { name = null }
+}
+
+private class PersonImpl(
+ override val identifier: String?,
+ override val name: Name?,
+ override val email: String?,
+ override val telephone: String?
+) : Person {
+ override fun toBuilder(): Person.Builder<*> =
+ PersonBuilderImpl()
+ .setIdentifier(identifier)
+ .setName(name)
+ .setEmail(email)
+ .setTelephone(telephone)
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java
index 7f689b5..8e872f3 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java
@@ -17,6 +17,7 @@
package androidx.appactions.interaction.capabilities.core.impl.converters;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.appactions.interaction.capabilities.core.ExecutionResult;
import androidx.appactions.interaction.capabilities.core.impl.exceptions.StructConversionException;
import androidx.appactions.interaction.capabilities.core.values.Alarm;
@@ -52,7 +53,6 @@
import java.time.format.DateTimeParseException;
import java.util.HashMap;
import java.util.Map;
-import java.util.Optional;
/** Converters for capability argument values. Convert from internal proto types to public types. */
public final class TypeConverters {
@@ -94,13 +94,14 @@
ParcelDelivery::getTrackingNumber,
ParcelDelivery.Builder::setTrackingNumber)
.bindStringField(
- "trackingUrl", ParcelDelivery::getTrackingUrl,
+ "trackingUrl",
+ ParcelDelivery::getTrackingUrl,
ParcelDelivery.Builder::setTrackingUrl)
.build();
public static final TypeSpec<Order> ORDER_TYPE_SPEC =
TypeSpecBuilder.newBuilderForThing("Order", Order::newBuilder)
- .bindZonedDateTimeField("orderDate", Order::getOrderDate,
- Order.Builder::setOrderDate)
+ .bindZonedDateTimeField(
+ "orderDate", Order::getOrderDate, Order.Builder::setOrderDate)
.bindSpecField(
"orderDelivery",
Order::getOrderDelivery,
@@ -117,24 +118,34 @@
Order.Builder::setOrderStatus,
Order.OrderStatus.class)
.bindSpecField(
- "seller", Order::getSeller, Order.Builder::setSeller,
+ "seller",
+ Order::getSeller,
+ Order.Builder::setSeller,
ORGANIZATION_TYPE_SPEC)
.build();
public static final TypeSpec<Person> PERSON_TYPE_SPEC =
TypeSpecBuilder.newBuilderForThing("Person", Person::newBuilder)
.bindStringField("email", Person::getEmail, Person.Builder::setEmail)
- .bindStringField("telephone", Person::getTelephone,
- Person.Builder::setTelephone)
+ .bindStringField(
+ "telephone", Person::getTelephone, Person.Builder::setTelephone)
.bindStringField("name", Person::getName, Person.Builder::setName)
.build();
public static final TypeSpec<Alarm> ALARM_TYPE_SPEC =
TypeSpecBuilder.newBuilderForThing("Alarm", Alarm::newBuilder).build();
public static final TypeSpec<Timer> TIMER_TYPE_SPEC =
TypeSpecBuilder.newBuilderForThing("Timer", Timer::newBuilder).build();
+ public static final TypeSpec<Attendee> ATTENDEE_TYPE_SPEC =
+ new UnionTypeSpec.Builder<Attendee>()
+ .bindMemberType(
+ (attendee) -> attendee.asPerson().orElse(null),
+ (person) -> new Attendee(person),
+ PERSON_TYPE_SPEC)
+ .build();
public static final TypeSpec<CalendarEvent> CALENDAR_EVENT_TYPE_SPEC =
TypeSpecBuilder.newBuilderForThing("CalendarEvent", CalendarEvent::newBuilder)
.bindZonedDateTimeField(
- "startDate", CalendarEvent::getStartDate,
+ "startDate",
+ CalendarEvent::getStartDate,
CalendarEvent.Builder::setStartDate)
.bindZonedDateTimeField(
"endDate", CalendarEvent::getEndDate, CalendarEvent.Builder::setEndDate)
@@ -142,16 +153,31 @@
"attendee",
CalendarEvent::getAttendeeList,
CalendarEvent.Builder::addAllAttendee,
- new AttendeeTypeSpec())
+ ATTENDEE_TYPE_SPEC)
.build();
public static final TypeSpec<SafetyCheck> SAFETY_CHECK_TYPE_SPEC =
TypeSpecBuilder.newBuilderForThing("SafetyCheck", SafetyCheck::newBuilder)
- .bindDurationField("duration", SafetyCheck::getDuration,
- SafetyCheck.Builder::setDuration)
+ .bindDurationField(
+ "duration", SafetyCheck::getDuration, SafetyCheck.Builder::setDuration)
.bindZonedDateTimeField(
- "checkinTime", SafetyCheck::getCheckinTime,
+ "checkinTime",
+ SafetyCheck::getCheckinTime,
SafetyCheck.Builder::setCheckinTime)
.build();
+ public static final TypeSpec<Recipient> RECIPIENT_TYPE_SPEC =
+ new UnionTypeSpec.Builder<Recipient>()
+ .bindMemberType(
+ (recipient) -> recipient.asPerson().orElse(null),
+ (person) -> new Recipient(person),
+ PERSON_TYPE_SPEC)
+ .build();
+ public static final TypeSpec<Participant> PARTICIPANT_TYPE_SPEC =
+ new UnionTypeSpec.Builder<Participant>()
+ .bindMemberType(
+ (participant) -> participant.asPerson().orElse(null),
+ (person) -> new Participant(person),
+ PERSON_TYPE_SPEC)
+ .build();
private static final String FIELD_NAME_CALL_FORMAT = "callFormat";
private static final String FIELD_NAME_PARTICIPANT = "participant";
private static final String FIELD_NAME_TYPE_CALL = "Call";
@@ -160,8 +186,7 @@
private static final String FIELD_NAME_RECIPIENT = "recipient";
private static final String FIELD_NAME_TEXT = "text";
- private TypeConverters() {
- }
+ private TypeConverters() {}
/**
* @param paramValue
@@ -201,7 +226,8 @@
return (int) paramValue.getNumberValue();
}
- /** Converts a ParamValue to a Boolean object.
+ /**
+ * Converts a ParamValue to a Boolean object.
*
* @param paramValue
* @return
@@ -230,8 +256,8 @@
try {
return LocalDate.parse(paramValue.getStringValue());
} catch (DateTimeParseException e) {
- throw new StructConversionException("Failed to parse ISO 8601 string to LocalDate",
- e);
+ throw new StructConversionException(
+ "Failed to parse ISO 8601 string to LocalDate", e);
}
}
throw new StructConversionException(
@@ -250,8 +276,8 @@
try {
return LocalTime.parse(paramValue.getStringValue());
} catch (DateTimeParseException e) {
- throw new StructConversionException("Failed to parse ISO 8601 string to LocalTime",
- e);
+ throw new StructConversionException(
+ "Failed to parse ISO 8601 string to LocalTime", e);
}
}
throw new StructConversionException(
@@ -313,8 +339,8 @@
*/
@NonNull
public static Entity toEntity(@NonNull ItemList itemList) {
- Entity.Builder builder = Entity.newBuilder().setValue(
- ITEM_LIST_TYPE_SPEC.toStruct(itemList));
+ Entity.Builder builder =
+ Entity.newBuilder().setValue(ITEM_LIST_TYPE_SPEC.toStruct(itemList));
itemList.getId().ifPresent(builder::setIdentifier);
return builder.build();
}
@@ -327,8 +353,8 @@
*/
@NonNull
public static Entity toEntity(@NonNull ListItem listItem) {
- Entity.Builder builder = Entity.newBuilder().setValue(
- LIST_ITEM_TYPE_SPEC.toStruct(listItem));
+ Entity.Builder builder =
+ Entity.newBuilder().setValue(LIST_ITEM_TYPE_SPEC.toStruct(listItem));
listItem.getId().ifPresent(builder::setIdentifier);
return builder.build();
}
@@ -417,9 +443,12 @@
*/
@NonNull
public static Entity toEntity(@NonNull Participant participant) {
- ParticipantTypeSpec typeSpec = new ParticipantTypeSpec();
- Entity.Builder builder = Entity.newBuilder().setValue(typeSpec.toStruct(participant));
- typeSpec.getId(participant).ifPresent(builder::setIdentifier);
+ Entity.Builder builder =
+ Entity.newBuilder().setValue(PARTICIPANT_TYPE_SPEC.toStruct(participant));
+ @Nullable String identifier = PARTICIPANT_TYPE_SPEC.getIdentifier(participant);
+ if (identifier != null) {
+ builder.setIdentifier(identifier);
+ }
return builder.build();
}
@@ -429,9 +458,12 @@
*/
@NonNull
public static Entity toEntity(@NonNull Recipient recipient) {
- RecipientTypeSpec typeSpec = new RecipientTypeSpec();
- Entity.Builder builder = Entity.newBuilder().setValue(typeSpec.toStruct(recipient));
- typeSpec.getId(recipient).ifPresent(builder::setIdentifier);
+ Entity.Builder builder =
+ Entity.newBuilder().setValue(RECIPIENT_TYPE_SPEC.toStruct(recipient));
+ @Nullable String identifier = RECIPIENT_TYPE_SPEC.getIdentifier(recipient);
+ if (identifier != null) {
+ builder.setIdentifier(identifier);
+ }
return builder.build();
}
@@ -557,8 +589,8 @@
@NonNull TypeSpec<T> nestedTypeSpec) {
return TypeSpecBuilder.<SearchAction<T>, SearchAction.Builder<T>>newBuilder(
"SearchAction", SearchAction::newBuilder)
- .bindStringField("query", SearchAction<T>::getQuery,
- SearchAction.Builder<T>::setQuery)
+ .bindStringField(
+ "query", SearchAction<T>::getQuery, SearchAction.Builder<T>::setQuery)
.bindSpecField(
"object",
SearchAction<T>::getObject,
@@ -657,20 +689,24 @@
/** Converts a Participant to a ParamValue. */
@NonNull
public static ParamValue toParamValue(@NonNull Participant value) {
- ParticipantTypeSpec typeSpec = new ParticipantTypeSpec();
- ParamValue.Builder builder = ParamValue.newBuilder().setStructValue(
- typeSpec.toStruct(value));
- typeSpec.getId(value).ifPresent(builder::setIdentifier);
+ ParamValue.Builder builder =
+ ParamValue.newBuilder().setStructValue(PARTICIPANT_TYPE_SPEC.toStruct(value));
+ @Nullable String identifier = PARTICIPANT_TYPE_SPEC.getIdentifier(value);
+ if (identifier != null) {
+ builder.setIdentifier(identifier);
+ }
return builder.build();
}
/** Converts a Recipient to a ParamValue. */
@NonNull
public static ParamValue toParamValue(@NonNull Recipient value) {
- RecipientTypeSpec typeSpec = new RecipientTypeSpec();
- ParamValue.Builder builder = ParamValue.newBuilder().setStructValue(
- typeSpec.toStruct(value));
- typeSpec.getId(value).ifPresent(builder::setIdentifier);
+ ParamValue.Builder builder =
+ ParamValue.newBuilder().setStructValue(RECIPIENT_TYPE_SPEC.toStruct(value));
+ @Nullable String identifier = RECIPIENT_TYPE_SPEC.getIdentifier(value);
+ if (identifier != null) {
+ builder.setIdentifier(identifier);
+ }
return builder.build();
}
@@ -679,13 +715,14 @@
public static ParamValue toParamValue(@NonNull Call value) {
ParamValue.Builder builder = ParamValue.newBuilder();
Map<String, Value> fieldsMap = new HashMap<>();
- fieldsMap.put(FIELD_NAME_TYPE,
- Value.newBuilder().setStringValue(FIELD_NAME_TYPE_CALL).build());
+ fieldsMap.put(
+ FIELD_NAME_TYPE, Value.newBuilder().setStringValue(FIELD_NAME_TYPE_CALL).build());
if (value.getCallFormat().isPresent()) {
fieldsMap.put(
FIELD_NAME_CALL_FORMAT,
- Value.newBuilder().setStringValue(
- value.getCallFormat().get().toString()).build());
+ Value.newBuilder()
+ .setStringValue(value.getCallFormat().get().toString())
+ .build());
}
ListValue.Builder participantListBuilder = ListValue.newBuilder();
for (Participant participant : value.getParticipantList()) {
@@ -746,112 +783,4 @@
}
return fieldsMap.get(FIELD_NAME_TYPE).getStringValue();
}
-
- /** {@link TypeSpec} for {@link Participant}. */
- public static class ParticipantTypeSpec implements TypeSpec<Participant> {
- @Override
- @NonNull
- public Struct toStruct(@NonNull Participant object) {
- if (object.asPerson().isPresent()) {
- return PERSON_TYPE_SPEC.toStruct(object.asPerson().get());
- }
- return Struct.getDefaultInstance();
- }
-
- @Override
- @NonNull
- public Participant fromStruct(@NonNull Struct struct) throws StructConversionException {
- if (FIELD_NAME_TYPE_PERSON.equals(getStructType(struct))) {
- return new Participant(PERSON_TYPE_SPEC.fromStruct(struct));
- }
- throw new StructConversionException(
- String.format(
- "Unexpected type, expected type is %s while actual type is %s",
- FIELD_NAME_TYPE_PERSON, getStructType(struct)));
- }
-
- /**
- * Retrieves identifier from the object within union value.
- *
- * @param object
- * @return
- */
- @NonNull
- public Optional<String> getId(@NonNull Participant object) {
- return object.asPerson().isPresent() ? object.asPerson().get().getId()
- : Optional.empty();
- }
- }
-
- /** {@link TypeSpec} for {@link Recipient}. */
- public static class RecipientTypeSpec implements TypeSpec<Recipient> {
- @NonNull
- @Override
- public Struct toStruct(@NonNull Recipient object) {
- if (object.asPerson().isPresent()) {
- return PERSON_TYPE_SPEC.toStruct(object.asPerson().get());
- }
- return Struct.getDefaultInstance();
- }
-
- @Override
- @NonNull
- public Recipient fromStruct(@NonNull Struct struct) throws StructConversionException {
- if (FIELD_NAME_TYPE_PERSON.equals(getStructType(struct))) {
- return new Recipient(PERSON_TYPE_SPEC.fromStruct(struct));
- }
- throw new StructConversionException(
- String.format(
- "Unexpected type, expected type is %s while actual type is %s",
- FIELD_NAME_TYPE_PERSON, getStructType(struct)));
- }
-
- /**
- * Retrieves identifier from the object within union value.
- *
- * @param object
- * @return
- */
- @NonNull
- public Optional<String> getId(@NonNull Recipient object) {
- return object.asPerson().isPresent() ? object.asPerson().get().getId()
- : Optional.empty();
- }
- }
-
- /** {@link TypeSpec} for {@link Attendee}. */
- public static class AttendeeTypeSpec implements TypeSpec<Attendee> {
- @Override
- @NonNull
- public Struct toStruct(@NonNull Attendee object) {
- if (object.asPerson().isPresent()) {
- return PERSON_TYPE_SPEC.toStruct(object.asPerson().get());
- }
- return Struct.getDefaultInstance();
- }
-
- @NonNull
- @Override
- public Attendee fromStruct(@NonNull Struct struct) throws StructConversionException {
- if (FIELD_NAME_TYPE_PERSON.equals(getStructType(struct))) {
- return new Attendee(TypeConverters.PERSON_TYPE_SPEC.fromStruct(struct));
- }
- throw new StructConversionException(
- String.format(
- "Unexpected type, expected type is %s while actual type is %s",
- FIELD_NAME_TYPE_PERSON, getStructType(struct)));
- }
-
- /**
- * Retrieves identifier from the object within union value.
- *
- * @param object
- * @return
- */
- @NonNull
- public Optional<String> getId(@NonNull Attendee object) {
- return object.asPerson().isPresent() ? object.asPerson().get().getId()
- : Optional.empty();
- }
- }
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpec.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpec.kt
similarity index 61%
rename from appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpec.java
rename to appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpec.kt
index 11181a6..7e07afe 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpec.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpec.kt
@@ -14,28 +14,26 @@
* limitations under the License.
*/
-package androidx.appactions.interaction.capabilities.core.impl.converters;
+package androidx.appactions.interaction.capabilities.core.impl.converters
-import androidx.annotation.NonNull;
-import androidx.appactions.interaction.capabilities.core.impl.exceptions.StructConversionException;
-import androidx.appactions.interaction.protobuf.Struct;
+import androidx.appactions.interaction.capabilities.core.impl.exceptions.StructConversionException
+import androidx.appactions.interaction.protobuf.Struct
/**
- * TypeSpec is used to convert between java objects in capabilities/values and Struct proto.
- *
- * @param <T>
+ * TypeSpec is used to convert between native objects in capabilities/values and Struct proto.
*/
-public interface TypeSpec<T> {
+interface TypeSpec<T> {
+ /* Given the object, returns its identifier, which can be null. */
+ fun getIdentifier(obj: T): String?
- /** Converts a java object into a Struct proto. */
- @NonNull
- Struct toStruct(@NonNull T object);
+ /** Converts a object into a Struct proto. */
+ fun toStruct(obj: T): Struct
/**
- * Converts a Struct into java object.
+ * Converts a Struct into object.
*
* @throws StructConversionException if the Struct is malformed.
*/
- @NonNull
- T fromStruct(@NonNull Struct struct) throws StructConversionException;
+ @Throws(StructConversionException::class)
+ fun fromStruct(struct: Struct): T
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecBuilder.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecBuilder.java
index 46aa2d1..8cd3ede 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecBuilder.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecBuilder.java
@@ -42,6 +42,7 @@
private final List<FieldBinding<T, BuilderT>> mBindings = new ArrayList<>();
private final Supplier<BuilderT> mBuilderSupplier;
private CheckedInterfaces.Consumer<Struct> mStructValidator;
+ private Function<T, Optional<String>> mIdentifierGetter = (unused) -> Optional.empty();
private TypeSpecBuilder(Supplier<BuilderT> builderSupplier) {
this.mBuilderSupplier = builderSupplier;
@@ -66,29 +67,30 @@
* StructConversionException.
*
* @param struct the Struct to get values from.
- * @param key the String key of the field to retrieve.
+ * @param key the String key of the field to retrieve.
*/
private static Value getFieldFromStruct(Struct struct, String key)
throws StructConversionException {
try {
return struct.getFieldsOrThrow(key);
} catch (IllegalArgumentException e) {
- throw new StructConversionException(String.format("%s does not exist in Struct", key),
- e);
+ throw new StructConversionException(
+ String.format("%s does not exist in Struct", key), e);
}
}
static <T, BuilderT extends BuilderOf<T>> TypeSpecBuilder<T, BuilderT> newBuilder(
String typeName, Supplier<BuilderT> builderSupplier) {
return new TypeSpecBuilder<>(builderSupplier)
- .bindStringField("@type", (unused) -> Optional.of(typeName), (builder, val) -> {
- })
+ .bindStringField("@type", (unused) -> Optional.of(typeName), (builder, val) -> {})
.setStructValidator(
struct -> {
- if (!getFieldFromStruct(struct, "@type").getStringValue().equals(
- typeName)) {
+ if (!getFieldFromStruct(struct, "@type")
+ .getStringValue()
+ .equals(typeName)) {
throw new StructConversionException(
- String.format("Struct @type field must be equal to %s.",
+ String.format(
+ "Struct @type field must be equal to %s.",
typeName));
}
});
@@ -103,6 +105,7 @@
TypeSpecBuilder<T, BuilderT> newBuilderForThing(
String typeName, Supplier<BuilderT> builderSupplier) {
return newBuilder(typeName, builderSupplier)
+ .bindIdentifier(T::getId)
.bindStringField("identifier", T::getId, BuilderT::setId)
.bindStringField("name", T::getName, BuilderT::setName);
}
@@ -113,6 +116,11 @@
return this;
}
+ TypeSpecBuilder<T, BuilderT> bindIdentifier(Function<T, Optional<String>> identifierGetter) {
+ this.mIdentifierGetter = identifierGetter;
+ return this;
+ }
+
private TypeSpecBuilder<T, BuilderT> bindFieldInternal(
String name,
Function<T, Optional<Value>> valueGetter,
@@ -166,8 +174,7 @@
name,
(object) -> stringGetter.apply(object).map(TypeSpecBuilder::getStringValue),
(builder, value) ->
- value
- .map(Value::getStringValue)
+ value.map(Value::getStringValue)
.ifPresent(
stringValue -> stringSetter.accept(builder, stringValue)));
}
@@ -184,8 +191,10 @@
return bindFieldInternal(
name,
(object) ->
- valueGetter.apply(object).map(Enum::toString).map(
- TypeSpecBuilder::getStringValue),
+ valueGetter
+ .apply(object)
+ .map(Enum::toString)
+ .map(TypeSpecBuilder::getStringValue),
(builder, value) -> {
if (value.isPresent()) {
String stringValue = value.get().getStringValue();
@@ -215,13 +224,15 @@
return bindFieldInternal(
name,
(object) ->
- valueGetter.apply(object).map(Duration::toString).map(
- TypeSpecBuilder::getStringValue),
+ valueGetter
+ .apply(object)
+ .map(Duration::toString)
+ .map(TypeSpecBuilder::getStringValue),
(builder, value) -> {
if (value.isPresent()) {
try {
- valueSetter.accept(builder,
- Duration.parse(value.get().getStringValue()));
+ valueSetter.accept(
+ builder, Duration.parse(value.get().getStringValue()));
} catch (DateTimeParseException e) {
throw new StructConversionException(
"Failed to parse ISO 8601 string to Duration", e);
@@ -249,8 +260,8 @@
(builder, value) -> {
if (value.isPresent()) {
try {
- valueSetter.accept(builder,
- ZonedDateTime.parse(value.get().getStringValue()));
+ valueSetter.accept(
+ builder, ZonedDateTime.parse(value.get().getStringValue()));
} catch (DateTimeParseException e) {
throw new StructConversionException(
"Failed to parse ISO 8601 string to ZonedDateTime", e);
@@ -270,9 +281,7 @@
(object) ->
valueGetter
.apply(object)
- .map(
- Function
- .identity()) // Static analyzer incorrectly
+ .map(Function.identity()) // Static analyzer incorrectly
// throws error stating that the
// input to toStruct is nullable. This is a workaround to avoid
// the error from the analyzer.
@@ -296,12 +305,16 @@
valueGetter,
valueSetter,
(element) ->
- Optional.ofNullable(element).map(
- value -> getStructValue(spec.toStruct(value))),
+ Optional.ofNullable(element)
+ .map(value -> getStructValue(spec.toStruct(value))),
(value) -> spec.fromStruct(value.getStructValue()));
}
TypeSpec<T> build() {
- return new TypeSpecImpl<>(mBindings, mBuilderSupplier, Optional.ofNullable(mStructValidator));
+ return new TypeSpecImpl<>(
+ mIdentifierGetter,
+ mBindings,
+ mBuilderSupplier,
+ Optional.ofNullable(mStructValidator));
}
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecImpl.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecImpl.java
index 25ac2fc..c49c3b1 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecImpl.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecImpl.java
@@ -17,6 +17,7 @@
package androidx.appactions.interaction.capabilities.core.impl.converters;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf;
import androidx.appactions.interaction.capabilities.core.impl.exceptions.StructConversionException;
import androidx.appactions.interaction.protobuf.Struct;
@@ -26,10 +27,13 @@
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.function.Function;
import java.util.function.Supplier;
/** TypeSpecImpl is used to convert between java objects in capabilities/values and Struct proto. */
final class TypeSpecImpl<T, BuilderT extends BuilderOf<T>> implements TypeSpec<T> {
+ /* The function to retrieve the identifier. */
+ final Function<T, Optional<String>> mIdentifierGetter;
/** The list of FieldBinding objects. */
final List<FieldBinding<T, BuilderT>> mBindings;
@@ -41,23 +45,31 @@
final Supplier<BuilderT> mBuilderSupplier;
TypeSpecImpl(
+ Function<T, Optional<String>> identifierGetter,
List<FieldBinding<T, BuilderT>> bindings,
Supplier<BuilderT> builderSupplier,
Optional<CheckedInterfaces.Consumer<Struct>> structValidator) {
+ this.mIdentifierGetter = identifierGetter;
this.mBindings = Collections.unmodifiableList(bindings);
this.mBuilderSupplier = builderSupplier;
this.mStructValidator = structValidator;
}
+ @Nullable
+ @Override
+ public String getIdentifier(T obj) {
+ return mIdentifierGetter.apply(obj).orElse(null);
+ }
+
/** Converts a java object into a Struct proto using List of FieldBinding. */
@NonNull
@Override
- public Struct toStruct(@NonNull T object) {
+ public Struct toStruct(@NonNull T obj) {
Struct.Builder builder = Struct.newBuilder();
for (FieldBinding<T, BuilderT> binding : mBindings) {
binding
.valueGetter()
- .apply(object)
+ .apply(obj)
.ifPresent(value -> builder.putFields(binding.name(), value));
}
return builder.build();
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/UnionTypeSpec.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/UnionTypeSpec.kt
index e0990c1..b249bee 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/UnionTypeSpec.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/UnionTypeSpec.kt
@@ -29,15 +29,44 @@
val ctor: (M) -> T,
val typeSpec: TypeSpec<M>,
) {
+ @Throws(StructConversionException::class)
fun tryDeserialize(struct: Struct): T {
return ctor(typeSpec.fromStruct(struct))
}
- fun trySerialize(obj: T): Struct? {
- return memberGetter(obj)?.let { typeSpec.toStruct(it) }
+ fun serialize(obj: T): Struct {
+ return typeSpec.toStruct(memberGetter(obj)!!)
+ }
+
+ fun getIdentifier(obj: T): String? {
+ return typeSpec.getIdentifier(memberGetter(obj)!!)
+ }
+
+ fun isMemberSet(obj: T): Boolean {
+ return memberGetter(obj) != null
}
}
+ private fun getApplicableBinding(obj: T): MemberBinding<T, *> {
+ var applicableBindings = bindings.filter { it.isMemberSet(obj) }
+ return when (applicableBindings.size) {
+ 0 -> throw IllegalStateException("$obj is invalid, all union members are null.")
+ 1 -> applicableBindings[0]
+ else -> throw IllegalStateException(
+ "$obj is invalid, multiple union members are non-null."
+ )
+ }
+ }
+
+ override fun getIdentifier(obj: T): String? {
+ return getApplicableBinding(obj).getIdentifier(obj)
+ }
+
+ override fun toStruct(obj: T): Struct {
+ return getApplicableBinding(obj).serialize(obj)
+ }
+
+ @Throws(StructConversionException::class)
override fun fromStruct(struct: Struct): T {
for (binding in bindings) {
try {
@@ -46,16 +75,7 @@
continue
}
}
- throw StructConversionException("failed to deserialize union type")
- }
-
- override fun toStruct(obj: T): Struct {
- for (binding in bindings) {
- binding.trySerialize(obj)?.let {
- return it
- }
- }
- throw StructConversionException("failed to serialize union type")
+ throw StructConversionException("all member TypeSpecs failed to deserialize input Struct.")
}
class Builder<T : Any> {
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecBuilder.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecBuilder.java
index 3a6eee8..93a8cf9 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecBuilder.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecBuilder.java
@@ -130,25 +130,20 @@
*/
@NonNull
public <T, PossibleValueT>
- ActionSpecBuilder<PropertyT, ArgumentT, ArgumentBuilderT, OutputT>
- bindRequiredGenericParameter(
- @NonNull String paramName,
- @NonNull
- Function<? super PropertyT, TypeProperty<PossibleValueT>>
- propertyGetter,
- @NonNull BiConsumer<? super ArgumentBuilderT, T> paramConsumer,
- @NonNull ParamValueConverter<T> paramValueConverter,
- @NonNull EntityConverter<PossibleValueT> entityConverter) {
- return bindGenericParameter(
+ ActionSpecBuilder<PropertyT, ArgumentT, ArgumentBuilderT, OutputT> bindParameter(
+ @NonNull String paramName,
+ @NonNull
+ Function<? super PropertyT, TypeProperty<PossibleValueT>>
+ propertyGetter,
+ @NonNull BiConsumer<? super ArgumentBuilderT, T> paramConsumer,
+ @NonNull ParamValueConverter<T> paramValueConverter,
+ @NonNull EntityConverter<PossibleValueT> entityConverter) {
+ return bindOptionalParameter(
paramName,
- property ->
- Optional.of(
- PropertyConverter.getIntentParameter(
- paramName,
- propertyGetter.apply(property),
- entityConverter)),
+ property -> Optional.of(propertyGetter.apply(property)),
paramConsumer,
- paramValueConverter);
+ paramValueConverter,
+ entityConverter);
}
/**
@@ -170,7 +165,7 @@
@NonNull
public <T, PossibleValueT>
ActionSpecBuilder<PropertyT, ArgumentT, ArgumentBuilderT, OutputT>
- bindOptionalGenericParameter(
+ bindOptionalParameter(
@NonNull String paramName,
@NonNull
Function<
@@ -180,7 +175,7 @@
@NonNull BiConsumer<? super ArgumentBuilderT, T> paramConsumer,
@NonNull ParamValueConverter<T> paramValueConverter,
@NonNull EntityConverter<PossibleValueT> entityConverter) {
- return bindGenericParameter(
+ return bindParameterInternal(
paramName,
property ->
optionalPropertyGetter
@@ -189,13 +184,19 @@
p ->
PropertyConverter.getIntentParameter(
paramName, p, entityConverter)),
- paramConsumer,
- paramValueConverter);
+ (argBuilder, paramList) -> {
+ if (!paramList.isEmpty()) {
+ paramConsumer.accept(
+ argBuilder,
+ SlotTypeConverter.ofSingular(paramValueConverter)
+ .convert(paramList));
+ }
+ });
}
/**
- * This is similar to {@link ActionSpecBuilder#bindOptionalGenericParameter} but for setting a
- * list of entities instead.
+ * This is similar to {@link ActionSpecBuilder#bindOptionalParameter} but for setting a list of
+ * entities instead.
*
* <p>This parameter is optional for any capability built from the generated {@link ActionSpec}.
* If the Property Optional is not set, this parameter will not exist in the parameter
@@ -204,7 +205,7 @@
@NonNull
public <T, PossibleValueT>
ActionSpecBuilder<PropertyT, ArgumentT, ArgumentBuilderT, OutputT>
- bindRepeatedGenericParameter(
+ bindRepeatedParameter(
@NonNull String paramName,
@NonNull
Function<
@@ -230,25 +231,6 @@
.convert(paramList)));
}
- private <T>
- ActionSpecBuilder<PropertyT, ArgumentT, ArgumentBuilderT, OutputT> bindGenericParameter(
- @NonNull String paramName,
- @NonNull Function<? super PropertyT, Optional<IntentParameter>> propertyGetter,
- @NonNull BiConsumer<? super ArgumentBuilderT, T> paramConsumer,
- @NonNull ParamValueConverter<T> paramValueConverter) {
- return bindParameterInternal(
- paramName,
- propertyGetter,
- (argBuilder, paramList) -> {
- if (!paramList.isEmpty()) {
- paramConsumer.accept(
- argBuilder,
- SlotTypeConverter.ofSingular(paramValueConverter)
- .convert(paramList));
- }
- });
- }
-
/**
* Binds an optional output.
*
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityTest.kt b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityTest.kt
index 843a0b1..6d6ddf2 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityTest.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityTest.kt
@@ -196,7 +196,7 @@
.setDescriptor(Property::class.java)
.setArgument(Argument::class.java, Argument::newBuilder)
.setOutput(Output::class.java)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"optionalString",
Property::optionalStringField,
Argument.Builder::setOptionalStringField,
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecImplTest.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecImplTest.java
index 6a09135..648cb5e 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecImplTest.java
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecImplTest.java
@@ -38,6 +38,20 @@
public final class TypeSpecImplTest {
@Test
+ public void bindIdentifier_success() {
+ TypeSpec<TestEntity> entityTypeSpec =
+ TypeSpecBuilder.newBuilder("TestEntity", TestEntity::newBuilder)
+ .bindIdentifier(TestEntity::getId)
+ .build();
+ assertThat(entityTypeSpec.getIdentifier(
+ TestEntity.newBuilder().setId("identifier1").build()
+ )).isEqualTo("identifier1");
+ assertThat(entityTypeSpec.getIdentifier(
+ TestEntity.newBuilder().build()
+ )).isNull();
+ }
+
+ @Test
public void bindEnumField_convertsSuccessfully() throws Exception {
TypeSpec<TestEntity> entityTypeSpec =
TypeSpecBuilder.newBuilder("TestEntity", TestEntity::newBuilder)
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/converters/UnionTypeSpecTest.kt b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/converters/UnionTypeSpecTest.kt
new file mode 100644
index 0000000..cad1967
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/converters/UnionTypeSpecTest.kt
@@ -0,0 +1,58 @@
+/*
+ * 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.interaction.capabilities.core.impl.converters
+
+import androidx.appactions.interaction.capabilities.core.values.Alarm
+import androidx.appactions.interaction.capabilities.core.values.Timer
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+/* Union type for testing */
+class AlarmOrTimer private constructor(
+ val asAlarm: Alarm? = null,
+ val asTimer: Timer? = null,
+) {
+ constructor(alarm: Alarm) : this(asAlarm = alarm)
+ constructor(timer: Timer) : this(asTimer = timer)
+}
+
+private val ALARM_OR_TIMER_TYPE_SPEC = UnionTypeSpec.Builder<AlarmOrTimer>()
+ .bindMemberType(
+ memberGetter = AlarmOrTimer::asAlarm,
+ ctor = { AlarmOrTimer(it) },
+ typeSpec = TypeConverters.ALARM_TYPE_SPEC,
+ )
+ .bindMemberType(
+ memberGetter = AlarmOrTimer::asTimer,
+ ctor = { AlarmOrTimer(it) },
+ typeSpec = TypeConverters.TIMER_TYPE_SPEC,
+ ).build()
+
+@RunWith(JUnit4::class)
+class UnionTypeSpecTest {
+ @Test
+ fun unionType_identifier() {
+ val alarmUnion = AlarmOrTimer(Alarm.newBuilder().setId("alarmId").build())
+ val timerUnion = AlarmOrTimer(Timer.newBuilder().setId("timerId").build())
+ val timerUnionWithoutId = AlarmOrTimer(Timer.newBuilder().build())
+ assertThat(ALARM_OR_TIMER_TYPE_SPEC.getIdentifier(alarmUnion)).isEqualTo("alarmId")
+ assertThat(ALARM_OR_TIMER_TYPE_SPEC.getIdentifier(timerUnion)).isEqualTo("timerId")
+ assertThat(ALARM_OR_TIMER_TYPE_SPEC.getIdentifier(timerUnionWithoutId)).isNull()
+ }
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecTest.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecTest.java
index 71420ae..13f5ff0 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecTest.java
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecTest.java
@@ -52,37 +52,37 @@
.setDescriptor(Property.class)
.setArgument(Argument.class, Argument::newBuilder)
.setOutput(Output.class)
- .bindRequiredGenericParameter(
+ .bindParameter(
"requiredEntity",
Property::requiredEntityField,
Argument.Builder::setRequiredEntityField,
TypeConverters::toEntityValue,
PropertyConverter::entityToProto)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"optionalEntity",
Property::optionalEntityField,
Argument.Builder::setOptionalEntityField,
TypeConverters::toEntityValue,
PropertyConverter::entityToProto)
- .bindRepeatedGenericParameter(
+ .bindRepeatedParameter(
"repeatedEntity",
Property::repeatedEntityField,
Argument.Builder::setRepeatedEntityField,
TypeConverters::toEntityValue,
PropertyConverter::entityToProto)
- .bindRequiredGenericParameter(
+ .bindParameter(
"requiredString",
Property::requiredStringField,
Argument.Builder::setRequiredStringField,
TypeConverters::toStringValue,
PropertyConverter::stringValueToProto)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"optionalString",
Property::optionalStringField,
Argument.Builder::setOptionalStringField,
TypeConverters::toStringValue,
PropertyConverter::stringValueToProto)
- .bindRepeatedGenericParameter(
+ .bindRepeatedParameter(
"repeatedString",
Property::repeatedStringField,
Argument.Builder::setRepeatedStringField,
@@ -113,18 +113,18 @@
.setArgument(
GenericEntityArgument.class, GenericEntityArgument::newBuilder)
.setOutput(Output.class)
- .bindRequiredGenericParameter(
+ .bindParameter(
"requiredEntity",
GenericEntityProperty::singularField,
GenericEntityArgument.Builder::setSingularField,
STRING_PARAM_VALUE_CONVERTER,
STRING_ENTITY_CONVERTER)
- .bindOptionalGenericParameter("optionalEntity",
+ .bindOptionalParameter("optionalEntity",
GenericEntityProperty::optionalField,
GenericEntityArgument.Builder::setOptionalField,
STRING_PARAM_VALUE_CONVERTER,
STRING_ENTITY_CONVERTER)
- .bindRepeatedGenericParameter("repeatedEntities",
+ .bindRepeatedParameter("repeatedEntities",
GenericEntityProperty::repeatedField,
GenericEntityArgument.Builder::setRepeatedField,
STRING_PARAM_VALUE_CONVERTER,
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImplTest.kt b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImplTest.kt
index 308135b..d37e39c 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImplTest.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImplTest.kt
@@ -951,28 +951,28 @@
.setDescriptor(Property::class.java)
.setArgument(Argument::class.java, Argument::newBuilder)
.setOutput(Output::class.java)
- .bindRequiredGenericParameter(
+ .bindParameter(
"required",
Property::requiredEntityField,
Argument.Builder::setRequiredEntityField,
TypeConverters::toEntityValue,
PropertyConverter::entityToProto
)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"optional",
Property::optionalStringField,
Argument.Builder::setOptionalStringField,
TypeConverters::toStringValue,
PropertyConverter::stringValueToProto
)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"optionalEnum",
Property::enumField,
Argument.Builder::setEnumField,
{ TestEnum.VALUE_1 },
{ Entity.newBuilder().setIdentifier(it.toString()).build() }
)
- .bindRepeatedGenericParameter(
+ .bindRepeatedParameter(
"repeated",
Property::repeatedStringField,
Argument.Builder::setRepeatedStringField,
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityStructFill.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityStructFill.java
index 1cc4526..a24fc6c 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityStructFill.java
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityStructFill.java
@@ -40,13 +40,13 @@
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
.setDescriptor(Property.class)
.setArgument(Argument.class, Argument::newBuilder)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"listItem",
Property::listItem,
Argument.Builder::setListItem,
TypeConverters::toListItem,
TypeConverters::toEntity)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"string",
Property::anyString,
Argument.Builder::setAnyString,
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityTwoEntityValues.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityTwoEntityValues.java
index 9541f9a..f1e0d43 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityTwoEntityValues.java
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityTwoEntityValues.java
@@ -38,13 +38,13 @@
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
.setDescriptor(Property.class)
.setArgument(Argument.class, Argument::newBuilder)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"slotA",
Property::slotA,
Argument.Builder::setSlotA,
TypeConverters::toEntityValue,
PropertyConverter::entityToProto)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"slotB",
Property::slotB,
Argument.Builder::setSlotB,
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityTwoStrings.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityTwoStrings.java
index 1c691ff..21b737f 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityTwoStrings.java
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityTwoStrings.java
@@ -36,13 +36,13 @@
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
.setDescriptor(Property.class)
.setArgument(Argument.class, Argument::newBuilder)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"stringSlotA",
Property::stringSlotA,
Argument.Builder::setStringSlotA,
TypeConverters::toStringValue,
PropertyConverter::stringValueToProto)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"stringSlotB",
Property::stringSlotB,
Argument.Builder::setStringSlotB,
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/TestEntity.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/TestEntity.java
index ee3db39..a8d103c 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/TestEntity.java
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/TestEntity.java
@@ -33,6 +33,8 @@
return new AutoValue_TestEntity.Builder();
}
+ public abstract Optional<String> getId();
+
public abstract Optional<String> getName();
public abstract Optional<Duration> getDuration();
@@ -63,6 +65,8 @@
@AutoValue.Builder
public abstract static class Builder implements BuilderOf<TestEntity> {
+ public abstract Builder setId(String id);
+
public abstract Builder setName(String name);
public abstract Builder setDuration(Duration duration);
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetExerciseObservation.kt b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetExerciseObservation.kt
index b3e29fc..1f61dfe 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetExerciseObservation.kt
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetExerciseObservation.kt
@@ -40,14 +40,14 @@
GetExerciseObservation.Argument::Builder
)
.setOutput(GetExerciseObservation.Output::class.java)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"healthObservation.startTime",
{ property -> Optional.ofNullable(property.startTime) },
GetExerciseObservation.Argument.Builder::setStartTime,
TypeConverters::toLocalTime,
TypeConverters::toEntity
)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"healthObservation.endTime",
{ property -> Optional.ofNullable(property.endTime) },
GetExerciseObservation.Argument.Builder::setEndTime,
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetHealthObservation.kt b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetHealthObservation.kt
index 6f04814..ac98ea1 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetHealthObservation.kt
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetHealthObservation.kt
@@ -40,14 +40,14 @@
GetHealthObservation.Argument::Builder
)
.setOutput(GetHealthObservation.Output::class.java)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"exerciseObservation.startTime",
{ property -> Optional.ofNullable(property.startTime) },
GetHealthObservation.Argument.Builder::setStartTime,
TypeConverters::toLocalTime,
TypeConverters::toEntity
)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"exerciseObservation.endTime",
{ property -> Optional.ofNullable(property.endTime) },
GetHealthObservation.Argument.Builder::setEndTime,
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/PauseExercise.kt b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/PauseExercise.kt
index 6f2613f..aed3db4 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/PauseExercise.kt
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/PauseExercise.kt
@@ -38,7 +38,7 @@
.setDescriptor(PauseExercise.Property::class.java)
.setArgument(PauseExercise.Argument::class.java, PauseExercise.Argument::Builder)
.setOutput(PauseExercise.Output::class.java)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"exercise.name",
{ property -> Optional.ofNullable(property.name) },
PauseExercise.Argument.Builder::setName,
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/ResumeExercise.kt b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/ResumeExercise.kt
index 82418fe..629896e 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/ResumeExercise.kt
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/ResumeExercise.kt
@@ -38,7 +38,7 @@
.setDescriptor(ResumeExercise.Property::class.java)
.setArgument(ResumeExercise.Argument::class.java, ResumeExercise.Argument::Builder)
.setOutput(ResumeExercise.Output::class.java)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"exercise.name",
{ property -> Optional.ofNullable(property.name) },
ResumeExercise.Argument.Builder::setName,
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StartExercise.kt b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StartExercise.kt
index 3d53953..0ecf95b 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StartExercise.kt
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StartExercise.kt
@@ -39,14 +39,14 @@
.setDescriptor(StartExercise.Property::class.java)
.setArgument(StartExercise.Argument::class.java, StartExercise.Argument::Builder)
.setOutput(StartExercise.Output::class.java)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"exercise.duration",
{ property -> Optional.ofNullable(property.duration) },
StartExercise.Argument.Builder::setDuration,
TypeConverters::toDuration,
TypeConverters::toEntity
)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"exercise.name",
{ property -> Optional.ofNullable(property.name) },
StartExercise.Argument.Builder::setName,
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StopExercise.kt b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StopExercise.kt
index b21c3f0..bc9de14 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StopExercise.kt
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StopExercise.kt
@@ -38,7 +38,7 @@
.setDescriptor(StopExercise.Property::class.java)
.setArgument(StopExercise.Argument::class.java, StopExercise.Argument::Builder)
.setOutput(StopExercise.Output::class.java)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"exercise.name",
{ property -> Optional.ofNullable(property.name) },
StopExercise.Argument.Builder::setName,
diff --git a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/PauseTimer.kt b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/PauseTimer.kt
index 8be0164..c79ab5d 100644
--- a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/PauseTimer.kt
+++ b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/PauseTimer.kt
@@ -39,7 +39,7 @@
.setDescriptor(PauseTimer.Property::class.java)
.setArgument(PauseTimer.Argument::class.java, PauseTimer.Argument::Builder)
.setOutput(PauseTimer.Output::class.java)
- .bindRepeatedGenericParameter(
+ .bindRepeatedParameter(
"timer",
{ property -> Optional.ofNullable(property.timerList) },
PauseTimer.Argument.Builder::setTimerList,
diff --git a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResetTimer.kt b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResetTimer.kt
index 92cc27f..2392e27 100644
--- a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResetTimer.kt
+++ b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResetTimer.kt
@@ -39,7 +39,7 @@
.setDescriptor(ResetTimer.Property::class.java)
.setArgument(ResetTimer.Argument::class.java, ResetTimer.Argument::Builder)
.setOutput(ResetTimer.Output::class.java)
- .bindRepeatedGenericParameter(
+ .bindRepeatedParameter(
"timer",
{ property -> Optional.ofNullable(property.timerList) },
ResetTimer.Argument.Builder::setTimerList,
diff --git a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResumeTimer.kt b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResumeTimer.kt
index a9ef395..b06f25f 100644
--- a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResumeTimer.kt
+++ b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResumeTimer.kt
@@ -39,7 +39,7 @@
.setDescriptor(ResumeTimer.Property::class.java)
.setArgument(ResumeTimer.Argument::class.java, ResumeTimer.Argument::Builder)
.setOutput(ResumeTimer.Output::class.java)
- .bindRepeatedGenericParameter(
+ .bindRepeatedParameter(
"timer",
{ property -> Optional.ofNullable(property.timerList) },
ResumeTimer.Argument.Builder::setTimerList,
diff --git a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StartTimer.kt b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StartTimer.kt
index dd54fab..8a561ee 100644
--- a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StartTimer.kt
+++ b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StartTimer.kt
@@ -44,21 +44,21 @@
.setDescriptor(StartTimer.Property::class.java)
.setArgument(StartTimer.Argument::class.java, StartTimer.Argument::Builder)
.setOutput(StartTimer.Output::class.java)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"timer.identifier",
{ property -> Optional.ofNullable(property.identifier) },
StartTimer.Argument.Builder::setIdentifier,
TypeConverters::toStringValue,
PropertyConverter::stringValueToProto
)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"timer.name",
{ property -> Optional.ofNullable(property.name) },
StartTimer.Argument.Builder::setName,
TypeConverters::toStringValue,
PropertyConverter::stringValueToProto
)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"timer.duration",
{ property -> Optional.ofNullable(property.duration) },
StartTimer.Argument.Builder::setDuration,
diff --git a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StopTimer.kt b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StopTimer.kt
index 9877d64..eb62e6d 100644
--- a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StopTimer.kt
+++ b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StopTimer.kt
@@ -39,7 +39,7 @@
.setDescriptor(StopTimer.Property::class.java)
.setArgument(StopTimer.Argument::class.java, StopTimer.Argument::Builder)
.setOutput(StopTimer.Output::class.java)
- .bindRepeatedGenericParameter(
+ .bindRepeatedParameter(
"timer",
{ property -> Optional.ofNullable(property.timerList) },
StopTimer.Argument.Builder::setTimerList,
diff --git a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt
index c556069..c126d96 100644
--- a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt
+++ b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt
@@ -47,14 +47,14 @@
.setDescriptor(StartSafetyCheck.Property::class.java)
.setArgument(StartSafetyCheck.Argument::class.java, StartSafetyCheck.Argument::Builder)
.setOutput(StartSafetyCheck.Output::class.java)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"safetyCheck.duration",
{ property -> Optional.ofNullable(property.duration) },
StartSafetyCheck.Argument.Builder::setDuration,
TypeConverters::toDuration,
TypeConverters::toEntity
)
- .bindOptionalGenericParameter(
+ .bindOptionalParameter(
"safetyCheck.checkInTime",
{ property -> Optional.ofNullable(property.checkInTime) },
StartSafetyCheck.Argument.Builder::setCheckInTime,
diff --git a/buildSrc-tests/src/test/kotlin/androidx/build/checkapi/CheckApiTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/checkapi/CheckApiTest.kt
new file mode 100644
index 0000000..7bf5f5a
--- /dev/null
+++ b/buildSrc-tests/src/test/kotlin/androidx/build/checkapi/CheckApiTest.kt
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.build.checkapi
+
+import androidx.build.Version
+import java.io.File
+import org.junit.Assert.assertEquals
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TemporaryFolder
+
+class CheckApiTest {
+ @Rule
+ @JvmField
+ val tmpFolder = TemporaryFolder()
+
+ @Test
+ fun getRequiredCompatibilityApiFileFromDirTest() {
+ val apiDir = createTempDir("api", CORE_API_FILES)
+
+ assertEquals(
+ "1.1.0-beta02.txt",
+ getRequiredCompatibilityApiFileFromDir(
+ apiDir,
+ Version("1.1.0-beta03"),
+ ApiType.CLASSAPI
+ )?.name
+ )
+
+ assertEquals(
+ "1.3.0-beta01.txt",
+ getRequiredCompatibilityApiFileFromDir(
+ apiDir,
+ Version("1.4.0-alpha01"),
+ ApiType.CLASSAPI
+ )?.name
+ )
+ }
+
+ @Suppress("SameParameterValue")
+ private fun createTempDir(dirName: String, fileNames: List<String>): File =
+ tmpFolder.newFolder(dirName).also { apiDir ->
+ fileNames.forEach { fileName ->
+ File(apiDir, fileName).createNewFile()
+ }
+ }
+}
+
+/**
+ * List of API files representing `androidx.core:core:1.3.0-beta01`.
+ */
+private val CORE_API_FILES = listOf(
+ "1.1.0-beta01.txt",
+ "1.1.0-beta02.txt",
+ "1.1.0-rc01.txt",
+ "1.2.0-beta01.txt",
+ "1.2.0-beta02.txt",
+ "1.3.0-beta01.txt",
+ "api_lint.ignore",
+ "current.txt",
+ "public_plus_experimental_1.0.0.txt",
+ "public_plus_experimental_1.1.0-beta01.txt",
+ "public_plus_experimental_1.1.0-rc01.txt",
+ "public_plus_experimental_1.2.0-beta01.txt",
+ "public_plus_experimental_1.2.0-beta02.txt",
+ "public_plus_experimental_1.3.0-beta01.txt",
+ "res-1.1.0-beta01.txt",
+ "res-1.1.0-beta02.txt",
+ "res-1.1.0-rc01.txt",
+ "res-1.2.0-beta01.txt",
+ "res-1.2.0-beta02.txt",
+ "res-1.3.0-beta01.txt",
+ "res-current.txt",
+ "restricted_1.0.0.txt",
+ "restricted_1.1.0-beta01.txt",
+ "restricted_1.1.0-beta02.txt",
+ "restricted_1.1.0-rc01.txt",
+ "restricted_1.2.0-beta01.txt",
+ "restricted_1.2.0-beta02.txt",
+ "restricted_1.3.0-beta01.txt",
+ "restricted_current.txt"
+)
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXGradleProperties.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXGradleProperties.kt
index d373a4f..cca49a3 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXGradleProperties.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXGradleProperties.kt
@@ -152,6 +152,11 @@
*/
const val ALLOW_CUSTOM_COMPILE_SDK = "androidx.allowCustomCompileSdk"
+/**
+ * If false, disable the CheckAarMetadata task. Default value is true.
+ */
+const val CHECK_AAR_METADATA = "androidx.checkAarMetadata"
+
val ALL_ANDROIDX_PROPERTIES = setOf(
ADD_GROUP_CONSTRAINTS,
ALTERNATIVE_PROJECT_URL,
@@ -179,7 +184,8 @@
ENABLED_KMP_TARGET_PLATFORMS,
ALLOW_MISSING_LINT_CHECKS_PROJECT,
XCODEGEN_DOWNLOAD_URI,
- ALLOW_CUSTOM_COMPILE_SDK
+ ALLOW_CUSTOM_COMPILE_SDK,
+ CHECK_AAR_METADATA,
)
/**
@@ -286,3 +292,9 @@
s.toBoolean()
}.orElse(false)
}
+
+/**
+ * Returns whether the `CheckAarMetadata` task should be enabled.
+ */
+fun Project.isCheckAarMetadataEnabled() =
+ findBooleanProperty(CHECK_AAR_METADATA) ?: true
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
index 2d2bb9e..89544d6 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -139,6 +139,13 @@
task -> configureJvmTestTask(project, task)
}
+ // Disable AAR verification in the platform branch until b/271291033 is fixed.
+ if (!project.isCheckAarMetadataEnabled()) {
+ project.tasks.withType(CheckAarMetadataTask::class.java).configureEach { task ->
+ task.enabled = false
+ }
+ }
+
project.configureTaskTimeouts()
project.configureMavenArtifactUpload(extension, componentFactory)
project.configureExternalDependencyLicenseCheck()
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
index d9ff238..f7bd29a 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
@@ -91,8 +91,6 @@
)
buildOnServerTask.cacheEvenIfNoOutputs()
buildOnServerTask.distributionDirectory = getDistributionDirectory()
- buildOnServerTask.repositoryDirectory = getRepositoryDirectory()
- buildOnServerTask.buildId = getBuildId()
buildOnServerTask.dependsOn(
tasks.register(
CREATE_AGGREGATE_BUILD_INFO_FILES_TASK,
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/BuildOnServerTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/BuildOnServerTask.kt
index eda425a..006a4fc 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/BuildOnServerTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/BuildOnServerTask.kt
@@ -17,7 +17,6 @@
package androidx.build
import org.gradle.api.DefaultTask
-import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.PathSensitive
@@ -45,12 +44,6 @@
@Internal
lateinit var distributionDirectory: File
- @Internal
- lateinit var buildId: String
-
- @InputDirectory @PathSensitive(PathSensitivity.RELATIVE)
- lateinit var repositoryDirectory: File
-
@InputFiles @PathSensitive(PathSensitivity.RELATIVE)
fun getRequiredFiles(): List<File> {
return mutableListOf(
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/VerifyVersionFilesTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/VerifyVersionFilesTask.kt
index f752952..14eacb9 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/VerifyVersionFilesTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/VerifyVersionFilesTask.kt
@@ -40,9 +40,9 @@
@TaskAction
fun verifyVersionFilesPresent() {
repositoryDirectory.walk().forEach { file ->
- var expectedGroup = "androidx"
- if (file.path.contains("/androidx/build/support_repo/libyuv/libyuv/"))
- expectedGroup = "libyuv" // external library that we don't publish
+ var expectedPrefix = "androidx"
+ if (file.path.contains("/libyuv/"))
+ expectedPrefix = "libyuv_libyuv" // external library that we don't publish
if (file.extension == "aar") {
val inputStream = FileInputStream(file)
val aarFileInputStream = ZipInputStream(inputStream)
@@ -53,7 +53,7 @@
val classesJarInputStream = ZipInputStream(aarFileInputStream)
var jarEntry = classesJarInputStream.nextEntry
while (jarEntry != null) {
- if (jarEntry.name.startsWith("META-INF/$expectedGroup.") &&
+ if (jarEntry.name.startsWith("META-INF/$expectedPrefix.") &&
jarEntry.name.endsWith(".version")
) {
foundVersionFile = true
@@ -63,7 +63,7 @@
}
if (!foundVersionFile) {
throw Exception(
- "Missing classes.jar/META-INF/$expectedGroup.*version " +
+ "Missing classes.jar/META-INF/$expectedPrefix.*version " +
"file in ${file.absolutePath}"
)
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiLocation.kt b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiLocation.kt
index 9f10512..d9587ea 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiLocation.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiLocation.kt
@@ -84,8 +84,8 @@
return fromBaseName(apiFileDir, CURRENT)
}
- fun isResourceApiFile(apiFile: File): Boolean {
- return apiFile.name.startsWith(PREFIX_RESOURCE)
+ fun isResourceApiFilename(filename: String): Boolean {
+ return filename.startsWith(PREFIX_RESOURCE)
}
private fun fromBaseName(apiFileDir: File, baseName: String): ApiLocation {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/CheckApi.kt b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/CheckApi.kt
index b08f626..9fec2fd 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/CheckApi.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/CheckApi.kt
@@ -17,11 +17,14 @@
package androidx.build.checkapi
import androidx.build.Version
-import androidx.build.checkapi.ApiLocation.Companion.isResourceApiFile
+import androidx.build.checkapi.ApiLocation.Companion.isResourceApiFilename
import androidx.build.version
import org.gradle.api.GradleException
import org.gradle.api.Project
import java.io.File
+import java.nio.file.Files
+import java.nio.file.Path
+import kotlin.io.path.name
enum class ApiType {
CLASSAPI,
@@ -88,28 +91,30 @@
*/
fun getRequiredCompatibilityApiFileFromDir(
apiDir: File,
- version: Version,
+ apiVersion: Version,
apiType: ApiType
): File? {
- var lastFile: File? = null
- var lastVersion: Version? = null
- apiDir.listFiles()
- ?.filter { file ->
- (apiType == ApiType.RESOURCEAPI && isResourceApiFile(file)) ||
- (apiType == ApiType.CLASSAPI && !isResourceApiFile(file))
- }
- ?.forEach { file ->
- val parsed = Version.parseOrNull(file)
- parsed?.let { otherVersion ->
- if ((lastFile == null || lastVersion!! < otherVersion) &&
- (otherVersion < version) &&
- (otherVersion.isFinalApi()) &&
- (otherVersion.major == version.major)
- ) {
- lastFile = file
- lastVersion = otherVersion
- }
+ var highestPath: Path? = null
+ var highestVersion: Version? = null
+
+ // Find the path with highest version that is lower than the current API version.
+ Files.newDirectoryStream(apiDir.toPath()).forEach { path ->
+ val pathName = path.name
+ if ((apiType == ApiType.RESOURCEAPI && isResourceApiFilename(pathName)) ||
+ (apiType == ApiType.CLASSAPI && !isResourceApiFilename(pathName))
+ ) {
+ val pathVersion = Version.parseFilenameOrNull(pathName)
+ if (pathVersion != null &&
+ (highestVersion == null || pathVersion > highestVersion!!) &&
+ pathVersion < apiVersion &&
+ pathVersion.isFinalApi() &&
+ pathVersion.major == apiVersion.major
+ ) {
+ highestPath = path
+ highestVersion = pathVersion
}
}
- return lastFile
+ }
+
+ return highestPath?.toFile()
}
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/Version.kt b/buildSrc/public/src/main/kotlin/androidx/build/Version.kt
index 33825d2..d385d9b 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/Version.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/Version.kt
@@ -92,7 +92,14 @@
*/
fun parseOrNull(file: File): Version? {
if (!file.isFile) return null
- val matcher = VERSION_FILE_REGEX.matcher(file.name)
+ return parseFilenameOrNull(file.name)
+ }
+
+ /**
+ * @return Version or null, if a name of the given file doesn't match
+ */
+ fun parseFilenameOrNull(filename: String): Version? {
+ val matcher = VERSION_FILE_REGEX.matcher(filename)
return if (matcher.matches()) parseOrNull(matcher.group(2)) else null
}
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraStateAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraStateAdapter.kt
index ed435db..268c9a4 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraStateAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraStateAdapter.kt
@@ -56,7 +56,7 @@
postCameraState(CameraInternal.State.CLOSED)
}
- public fun onGraphUpdated(cameraGraph: CameraGraph) = synchronized(lock) {
+ fun onGraphUpdated(cameraGraph: CameraGraph) = synchronized(lock) {
Log.debug { "Camera graph updated from $currentGraph to $cameraGraph" }
if (currentCameraInternalState != CameraInternal.State.CLOSED) {
postCameraState(CameraInternal.State.CLOSING)
@@ -66,7 +66,7 @@
currentCameraInternalState = CameraInternal.State.CLOSED
}
- public fun onGraphStateUpdated(cameraGraph: CameraGraph, graphState: GraphState) =
+ fun onGraphStateUpdated(cameraGraph: CameraGraph, graphState: GraphState) =
synchronized(lock) {
Log.debug { "$cameraGraph state updated to $graphState" }
handleStateTransition(cameraGraph, graphState)
@@ -131,12 +131,17 @@
graphState.cameraError.toCameraStateError()
)
} else {
- // TODO(b/263201241): Add transition to PENDING_OPEN once we handle errors
- // while a camera is already opened.
- CombinedCameraState(
- CameraInternal.State.CLOSING,
- graphState.cameraError.toCameraStateError()
- )
+ if (isRecoverableError(graphState.cameraError)) {
+ CombinedCameraState(
+ CameraInternal.State.PENDING_OPEN,
+ graphState.cameraError.toCameraStateError()
+ )
+ } else {
+ CombinedCameraState(
+ CameraInternal.State.CLOSING,
+ graphState.cameraError.toCameraStateError()
+ )
+ }
}
GraphStateStopping -> CombinedCameraState(CameraInternal.State.CLOSING)
@@ -148,8 +153,19 @@
when (graphState) {
GraphStateStopping -> CombinedCameraState(CameraInternal.State.CLOSING)
GraphStateStopped -> CombinedCameraState(CameraInternal.State.CLOSED)
- // TODO(b/263201241): Transition to appropriate states once we handle errors while
- // a camera is already opened.
+ is GraphStateError ->
+ if (isRecoverableError(graphState.cameraError)) {
+ CombinedCameraState(
+ CameraInternal.State.PENDING_OPEN,
+ graphState.cameraError.toCameraStateError()
+ )
+ } else {
+ CombinedCameraState(
+ CameraInternal.State.CLOSED,
+ graphState.cameraError.toCameraStateError()
+ )
+ }
+
else -> null
}
@@ -157,10 +173,34 @@
when (graphState) {
GraphStateStopped -> CombinedCameraState(CameraInternal.State.CLOSED)
GraphStateStarting -> CombinedCameraState(CameraInternal.State.OPENING)
+ is GraphStateError -> CombinedCameraState(
+ CameraInternal.State.CLOSING,
+ graphState.cameraError.toCameraStateError()
+ )
+
else -> null
}
- // TODO(b/263201241): Add PENDING_OPEN transitions once we have active recovery.
+ CameraInternal.State.PENDING_OPEN ->
+ when (graphState) {
+ GraphStateStarting -> CombinedCameraState(CameraInternal.State.OPENING)
+ GraphStateStarted -> CombinedCameraState(CameraInternal.State.OPEN)
+ is GraphStateError ->
+ if (isRecoverableError(graphState.cameraError)) {
+ CombinedCameraState(
+ CameraInternal.State.PENDING_OPEN,
+ graphState.cameraError.toCameraStateError()
+ )
+ } else {
+ CombinedCameraState(
+ CameraInternal.State.CLOSED,
+ graphState.cameraError.toCameraStateError()
+ )
+ }
+
+ else -> null
+ }
+
else ->
null
}
@@ -184,10 +224,14 @@
CameraState.ERROR_OTHER_RECOVERABLE_ERROR
CameraError.ERROR_ILLEGAL_ARGUMENT_EXCEPTION ->
- CameraState.ERROR_OTHER_RECOVERABLE_ERROR
+ CameraState.ERROR_CAMERA_FATAL_ERROR
CameraError.ERROR_SECURITY_EXCEPTION ->
- CameraState.ERROR_OTHER_RECOVERABLE_ERROR
+ CameraState.ERROR_CAMERA_FATAL_ERROR
+
+ CameraError.ERROR_GRAPH_CONFIG -> CameraState.ERROR_STREAM_CONFIG
+ CameraError.ERROR_DO_NOT_DISTURB_ENABLED ->
+ CameraState.ERROR_DO_NOT_DISTURB_MODE_ENABLED
else -> throw IllegalArgumentException("Unexpected CameraError: $this")
}
@@ -203,6 +247,12 @@
else -> throw IllegalArgumentException("Unexpected CameraInternal state: $this")
}
+ internal fun isRecoverableError(cameraError: CameraError) =
+ cameraError == CameraError.ERROR_CAMERA_DISCONNECTED ||
+ cameraError == CameraError.ERROR_CAMERA_IN_USE ||
+ cameraError == CameraError.ERROR_CAMERA_LIMIT_EXCEEDED ||
+ cameraError == CameraError.ERROR_CAMERA_DEVICE
+
internal fun MutableLiveData<CameraState>.setOrPostValue(cameraState: CameraState) {
if (Looper.myLooper() == Looper.getMainLooper()) {
this.value = cameraState
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt
index ad5975f..ccf2838 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt
@@ -71,42 +71,16 @@
}
/**
- * Check whether the input surface configuration list is under the capability of any combination
- * of this object.
- *
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
- * @param cameraId the camera id of the camera device to be compared
- * @param surfaceConfigList the surface configuration list to be compared
- * @return the check result that whether it could be supported
- */
- override fun checkSupported(
- isConcurrentCameraModeOn: Boolean,
- cameraId: String,
- surfaceConfigList: List<SurfaceConfig>?
- ): Boolean {
- if (surfaceConfigList == null || surfaceConfigList.isEmpty()) {
- return true
- }
-
- if (!checkIfSupportedCombinationExist(cameraId)) {
- return false
- }
-
- return supportedSurfaceCombinationMap[cameraId]!!.checkSupported(
- isConcurrentCameraModeOn, surfaceConfigList)
- }
-
- /**
* Transform to a SurfaceConfig object with cameraId, image format and size info
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
+ * @param cameraMode the working camera mode.
* @param cameraId the camera id of the camera device to transform the object
* @param imageFormat the image format info for the surface configuration object
* @param size the size info for the surface configuration object
* @return new {@link SurfaceConfig} object
*/
override fun transformSurfaceConfig(
- isConcurrentCameraModeOn: Boolean,
+ cameraMode: Int,
cameraId: String,
imageFormat: Int,
size: Size
@@ -114,7 +88,7 @@
checkIfSupportedCombinationExist(cameraId)
return supportedSurfaceCombinationMap[cameraId]!!.transformSurfaceConfig(
- isConcurrentCameraModeOn,
+ cameraMode,
imageFormat, size)
}
@@ -130,7 +104,7 @@
/**
* Retrieves a map of suggested stream specifications for the given list of use cases.
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
+ * @param cameraMode the working camera mode.
* @param cameraId the camera id of the camera device used by the use cases
* @param existingSurfaces list of surfaces already configured and used by the camera. The
* resolutions for these surface can not change.
@@ -144,7 +118,7 @@
* is not a valid id.
*/
override fun getSuggestedStreamSpecs(
- isConcurrentCameraModeOn: Boolean,
+ cameraMode: Int,
cameraId: String,
existingSurfaces: List<AttachedSurfaceInfo>,
newUseCaseConfigsSupportedSizeMap: Map<UseCaseConfig<*>, List<Size>>
@@ -157,7 +131,7 @@
}
return supportedSurfaceCombinationMap[cameraId]!!.getSuggestedStreamSpecifications(
- isConcurrentCameraModeOn,
+ cameraMode,
existingSurfaces,
newUseCaseConfigsSupportedSizeMap
)
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/GuaranteedConfigurationsUtil.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/GuaranteedConfigurationsUtil.kt
index 1a78536..b383e7a 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/GuaranteedConfigurationsUtil.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/GuaranteedConfigurationsUtil.kt
@@ -414,6 +414,199 @@
}
@JvmStatic
+ fun getUltraHighResolutionSupportedCombinationList(): List<SurfaceCombination> {
+ val combinationList: MutableList<SurfaceCombination> = ArrayList()
+
+ // (YUV, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (PRIV, RECORD)
+ // Covers (YUV, ULTRA_MAXIMUM) + (PRIV, PREVIEW) in the guaranteed table.
+ SurfaceCombination().apply {
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.ULTRA_MAXIMUM)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.RECORD)
+ )
+ }.also {
+ combinationList.add(it)
+ }
+
+ // (JPEG, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (PRIV, RECORD)
+ // Covers (JPEG, ULTRA_MAXIMUM) + (PRIV, PREVIEW) in the guaranteed table.
+ SurfaceCombination().apply {
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.ULTRA_MAXIMUM)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.RECORD)
+ )
+ }.also {
+ combinationList.add(it)
+ }
+
+ // (RAW, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (PRIV, RECORD)
+ // Covers (RAW, ULTRA_MAXIMUM) + (PRIV, PREVIEW) in the guaranteed table.
+ SurfaceCombination().apply {
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.ULTRA_MAXIMUM)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.RECORD)
+ )
+ }.also {
+ combinationList.add(it)
+ }
+
+ // (YUV, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (JPEG, MAXIMUM)
+ SurfaceCombination().apply {
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.ULTRA_MAXIMUM)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.MAXIMUM)
+ )
+ }.also {
+ combinationList.add(it)
+ }
+
+ // (JPEG, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (JPEG, MAXIMUM)
+ SurfaceCombination().apply {
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.ULTRA_MAXIMUM)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.MAXIMUM)
+ )
+ }.also {
+ combinationList.add(it)
+ }
+
+ // (RAW, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (JPEG, MAXIMUM)
+ SurfaceCombination().apply {
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.ULTRA_MAXIMUM)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.MAXIMUM)
+ )
+ }.also {
+ combinationList.add(it)
+ }
+
+ // (YUV, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (YUV, MAXIMUM)
+ // Covers (YUV, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (YUV, RECORD) in the guaranteed table.
+ SurfaceCombination().apply {
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.ULTRA_MAXIMUM)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.MAXIMUM)
+ )
+ }.also {
+ combinationList.add(it)
+ }
+
+ // (JPEG, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (YUV, MAXIMUM)
+ // Covers (JPEG, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (YUV, RECORD) in the guaranteed table.
+ SurfaceCombination().apply {
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.ULTRA_MAXIMUM)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.MAXIMUM)
+ )
+ }.also {
+ combinationList.add(it)
+ }
+
+ // (RAW, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (YUV, MAXIMUM)
+ // Covers (RAW, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (YUV, RECORD) in the guaranteed table.
+ SurfaceCombination().apply {
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.ULTRA_MAXIMUM)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.MAXIMUM)
+ )
+ }.also {
+ combinationList.add(it)
+ }
+
+ // (YUV, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (RAW, MAXIMUM)
+ SurfaceCombination().apply {
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.ULTRA_MAXIMUM)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.MAXIMUM)
+ )
+ }.also {
+ combinationList.add(it)
+ }
+
+ // (JPEG, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (RAW, MAXIMUM)
+ SurfaceCombination().apply {
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.ULTRA_MAXIMUM)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.MAXIMUM)
+ )
+ }.also {
+ combinationList.add(it)
+ }
+
+ // (RAW, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (RAW, MAXIMUM)
+ SurfaceCombination().apply {
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.ULTRA_MAXIMUM)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+ )
+ addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.MAXIMUM)
+ )
+ }.also {
+ combinationList.add(it)
+ }
+
+ return combinationList
+ }
+
+ @JvmStatic
fun getConcurrentSupportedCombinationList(): List<SurfaceCombination> {
val combinationList: MutableList<SurfaceCombination> = ArrayList()
// (YUV, s1440p)
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
index e7ee036..6c3d9b3 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
@@ -38,6 +38,7 @@
import androidx.camera.camera2.pipe.integration.compat.workaround.ResolutionCorrector
import androidx.camera.camera2.pipe.integration.impl.DisplayInfoManager
import androidx.camera.core.impl.AttachedSurfaceInfo
+import androidx.camera.core.impl.CameraMode
import androidx.camera.core.impl.EncoderProfilesProxy
import androidx.camera.core.impl.ImageFormatConstants
import androidx.camera.core.impl.StreamSpec
@@ -76,9 +77,11 @@
private val hardwareLevel =
cameraMetadata[CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL]
?: CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
- private val concurrentSurfaceCombinations: MutableList<SurfaceCombination> = ArrayList()
- private val surfaceCombinations: MutableList<SurfaceCombination> = ArrayList()
- private val outputSizesCache: MutableMap<Int, Array<Size>> = HashMap()
+ private val concurrentSurfaceCombinations: MutableList<SurfaceCombination> = mutableListOf()
+ private val surfaceCombinations: MutableList<SurfaceCombination> = mutableListOf()
+ private val ultraHighSurfaceCombinations: MutableList<SurfaceCombination> = mutableListOf()
+ private val cameraModeToSupportedCombinationsMap: MutableMap<Int, List<SurfaceCombination>> =
+ mutableMapOf()
private var isRawSupported = false
private var isBurstCaptureSupported = false
private var isConcurrentCameraModeSupported = false
@@ -99,6 +102,9 @@
init {
checkCapabilities()
generateSupportedCombinationList()
+ if (isUltraHighResolutionSensorSupported) {
+ generateUltraHighResolutionSupportedCombinationList()
+ }
isConcurrentCameraModeSupported =
context.packageManager.hasSystemFeature(FEATURE_CAMERA_CONCURRENT)
if (isConcurrentCameraModeSupported) {
@@ -118,17 +124,16 @@
* Check whether the input surface configuration list is under the capability of any combination
* of this object.
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
+ * @param cameraMode the working camera mode.
* @param surfaceConfigList the surface configuration list to be compared
* @return the check result that whether it could be supported
*/
fun checkSupported(
- isConcurrentCameraModeOn: Boolean,
+ cameraMode: Int,
surfaceConfigList: List<SurfaceConfig>
): Boolean {
// TODO(b/262772650): camera-pipe support for concurrent camera
- val targetSurfaceCombinations = if (isConcurrentCameraModeOn)
- concurrentSurfaceCombinations else surfaceCombinations
+ val targetSurfaceCombinations = getSurfaceCombinationsByCameraMode(cameraMode)
for (surfaceCombination in targetSurfaceCombinations) {
if (surfaceCombination.isSupported(surfaceConfigList)) {
return true
@@ -138,26 +143,51 @@
}
/**
+ * Returns the supported surface combinations according to the specified camera mode.
+ */
+ private fun getSurfaceCombinationsByCameraMode(
+ @CameraMode.Mode cameraMode: Int
+ ): List<SurfaceCombination> {
+ if (cameraModeToSupportedCombinationsMap.containsKey(cameraMode)) {
+ return cameraModeToSupportedCombinationsMap[cameraMode]!!
+ }
+ var supportedSurfaceCombinations: MutableList<SurfaceCombination> = mutableListOf()
+ when (cameraMode) {
+ CameraMode.CONCURRENT_CAMERA -> supportedSurfaceCombinations =
+ concurrentSurfaceCombinations
+
+ CameraMode.ULTRA_HIGH_RESOLUTION_CAMERA -> {
+ supportedSurfaceCombinations.addAll(ultraHighSurfaceCombinations)
+ supportedSurfaceCombinations.addAll(surfaceCombinations)
+ }
+
+ else -> supportedSurfaceCombinations.addAll(surfaceCombinations)
+ }
+ cameraModeToSupportedCombinationsMap[cameraMode] = supportedSurfaceCombinations
+ return supportedSurfaceCombinations
+ }
+
+ /**
* Transform to a SurfaceConfig object with image format and size info
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
+ * @param cameraMode the working camera mode.
* @param imageFormat the image format info for the surface configuration object
* @param size the size info for the surface configuration object
* @return new [SurfaceConfig] object
*/
fun transformSurfaceConfig(
- isConcurrentCameraModeOn: Boolean,
+ cameraMode: Int,
imageFormat: Int,
size: Size
): SurfaceConfig {
- return SurfaceConfig.transformSurfaceConfig(isConcurrentCameraModeOn,
+ return SurfaceConfig.transformSurfaceConfig(cameraMode,
imageFormat, size, surfaceSizeDefinition)
}
/**
* Finds the suggested stream specification of the newly added UseCaseConfig.
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
+ * @param cameraMode the working camera mode.
* @param existingSurfaces the existing surfaces.
* @param newUseCaseConfigsSupportedSizeMap newly added UseCaseConfig to supported output sizes
* map.
@@ -167,7 +197,7 @@
* found. This may be due to no available output size or no available surface combination.
*/
fun getSuggestedStreamSpecifications(
- isConcurrentCameraModeOn: Boolean,
+ cameraMode: Int,
existingSurfaces: List<AttachedSurfaceInfo>,
newUseCaseConfigsSupportedSizeMap: Map<UseCaseConfig<*>, List<Size>>
): Map<UseCaseConfig<*>, StreamSpec> {
@@ -182,7 +212,7 @@
for (useCaseConfig in newUseCaseConfigs) {
surfaceConfigs.add(
SurfaceConfig.transformSurfaceConfig(
- isConcurrentCameraModeOn,
+ cameraMode,
useCaseConfig.inputFormat,
RESOLUTION_VGA,
surfaceSizeDefinition
@@ -190,7 +220,7 @@
)
}
- if (!checkSupported(isConcurrentCameraModeOn, surfaceConfigs)) {
+ if (!checkSupported(cameraMode, surfaceConfigs)) {
throw java.lang.IllegalArgumentException(
"No supported surface combination is found for camera device - Id : " + cameraId +
". May be attempting to bind too many use cases. " + "Existing surfaces: " +
@@ -233,7 +263,7 @@
val newUseCase = newUseCaseConfigs[useCasesPriorityOrder[i]]
surfaceConfigList.add(
SurfaceConfig.transformSurfaceConfig(
- isConcurrentCameraModeOn,
+ cameraMode,
newUseCase.inputFormat,
size,
surfaceSizeDefinition
@@ -242,7 +272,7 @@
}
// Check whether the SurfaceConfig combination can be supported
- if (checkSupported(isConcurrentCameraModeOn, surfaceConfigList)) {
+ if (checkSupported(cameraMode, surfaceConfigList)) {
suggestedStreamSpecMap = HashMap()
for (useCaseConfig in newUseCaseConfigs) {
suggestedStreamSpecMap.put(
@@ -326,6 +356,12 @@
)
}
+ private fun generateUltraHighResolutionSupportedCombinationList() {
+ ultraHighSurfaceCombinations.addAll(
+ GuaranteedConfigurationsUtil.getUltraHighResolutionSupportedCombinationList()
+ )
+ }
+
private fun generateConcurrentSupportedCombinationList() {
concurrentSurfaceCombinations.addAll(
GuaranteedConfigurationsUtil.generateConcurrentSupportedCombinationList()
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/DeviceQuirksLoader.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/DeviceQuirksLoader.kt
index 24cdf62..32be169 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/DeviceQuirksLoader.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/DeviceQuirksLoader.kt
@@ -76,6 +76,9 @@
if (StillCaptureFlashStopRepeatingQuirk.isEnabled()) {
quirks.add(StillCaptureFlashStopRepeatingQuirk())
}
+ if (TorchIsClosedAfterImageCapturingQuirk.isEnabled()) {
+ quirks.add(TorchIsClosedAfterImageCapturingQuirk())
+ }
return quirks
}
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/TorchIsClosedAfterImageCapturingQuirk.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/TorchIsClosedAfterImageCapturingQuirk.kt
new file mode 100644
index 0000000..52c7c81
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/TorchIsClosedAfterImageCapturingQuirk.kt
@@ -0,0 +1,49 @@
+/*
+ * 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.camera2.pipe.integration.compat.quirk
+
+import android.annotation.SuppressLint
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.camera.core.impl.Quirk
+
+/**
+ * QuirkSummary
+ * - Bug Id: 228272227
+ * - Description: The Torch is unexpectedly turned off after taking a picture.
+ * - Device(s): Redmi 4X, Redmi 5A, Mi A1, Mi A2, Mi A2 lite and Redmi 6 Pro.
+ */
+@SuppressLint("CameraXQuirksClassDetector") // TODO(b/270421716): enable when kotlin is supported.
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+class TorchIsClosedAfterImageCapturingQuirk : Quirk {
+
+ companion object {
+ // List of devices with the issue. See b/228272227.
+ private val BUILD_MODELS = listOf(
+ "mi a1", // Xiaomi Mi A1
+ "mi a2", // Xiaomi Mi A2
+ "mi a2 lite", // Xiaomi Mi A2 Lite
+ "redmi 4x", // Xiaomi Redmi 4X
+ "redmi 5a", // Xiaomi Redmi 5A
+ "redmi 6 pro", // Xiaomi Redmi 6 Pro
+ )
+
+ fun isEnabled(): Boolean {
+ return BUILD_MODELS.contains(Build.MODEL.lowercase())
+ }
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/workaround/CapturePipelineTorchCorrection.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/workaround/CapturePipelineTorchCorrection.kt
new file mode 100644
index 0000000..0525273
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/workaround/CapturePipelineTorchCorrection.kt
@@ -0,0 +1,106 @@
+/*
+ * 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.
+ */
+
+@file:RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+
+package androidx.camera.camera2.pipe.integration.compat.workaround
+
+import android.hardware.camera2.CameraDevice
+import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.Request
+import androidx.camera.camera2.pipe.RequestTemplate
+import androidx.camera.camera2.pipe.core.Log
+import androidx.camera.camera2.pipe.integration.compat.quirk.DeviceQuirks
+import androidx.camera.camera2.pipe.integration.compat.quirk.TorchIsClosedAfterImageCapturingQuirk
+import androidx.camera.camera2.pipe.integration.config.UseCaseCameraScope
+import androidx.camera.camera2.pipe.integration.impl.CapturePipeline
+import androidx.camera.camera2.pipe.integration.impl.CapturePipelineImpl
+import androidx.camera.camera2.pipe.integration.impl.TorchControl
+import androidx.camera.camera2.pipe.integration.impl.UseCaseThreads
+import androidx.camera.core.TorchState
+import javax.inject.Inject
+import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.joinAll
+import kotlinx.coroutines.launch
+
+/**
+ * This is a workaround for b/228272227 where the Torch is unexpectedly closed after a single
+ * capturing.
+ *
+ * If the Torch is enabled before performing a single capture, this workaround may turn the Torch
+ * OFF then ON after the capturing.
+ */
+@UseCaseCameraScope
+class CapturePipelineTorchCorrection @Inject constructor(
+ private val capturePipelineImpl: CapturePipelineImpl,
+ private val threads: UseCaseThreads,
+ private val torchControl: TorchControl,
+) : CapturePipeline {
+
+ override suspend fun submitStillCaptures(
+ requests: List<Request>,
+ captureMode: Int,
+ flashType: Int,
+ flashMode: Int
+ ): List<Deferred<Void?>> {
+ val needCorrectTorchState = isCorrectionRequired(requests)
+
+ // Forward the capture request to capturePipelineImpl
+ val deferredResults =
+ capturePipelineImpl.submitStillCaptures(requests, captureMode, flashType, flashMode)
+
+ if (needCorrectTorchState) {
+ threads.sequentialScope.launch {
+ deferredResults.joinAll()
+ Log.debug { "Re-enable Torch to correct the Torch state" }
+ torchControl.setTorchAsync(torch = false).join()
+ torchControl.setTorchAsync(torch = true).join()
+ Log.debug { "Re-enable Torch to correct the Torch state, done" }
+ }
+ }
+
+ return deferredResults
+ }
+
+ override var template: Int = CameraDevice.TEMPLATE_PREVIEW
+ set(value) {
+ capturePipelineImpl.template = value
+ field = value
+ }
+
+ /**
+ * Return true means the Torch will be unexpectedly closed, and it requires turning on the
+ * Torch again after the capturing.
+ */
+ private fun isCorrectionRequired(requests: Collection<Request>): Boolean {
+ return requests.contains(stillCaptureTemplate) && isTorchOn()
+ }
+
+ private fun Collection<Request>.contains(template: RequestTemplate): Boolean {
+ forEach { request ->
+ if (request.template == template)
+ return true
+ }
+ return false
+ }
+
+ private fun isTorchOn() = torchControl.torchStateLiveData.value == TorchState.ON
+
+ companion object {
+ val isEnabled = DeviceQuirks[TorchIsClosedAfterImageCapturingQuirk::class.java] != null
+ private val stillCaptureTemplate = RequestTemplate(CameraDevice.TEMPLATE_STILL_CAPTURE)
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/config/UseCaseCameraConfig.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/config/UseCaseCameraConfig.kt
index ca15c6e..5e7a7b4 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/config/UseCaseCameraConfig.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/config/UseCaseCameraConfig.kt
@@ -30,8 +30,10 @@
import androidx.camera.camera2.pipe.integration.adapter.CameraStateAdapter
import androidx.camera.camera2.pipe.integration.adapter.SessionConfigAdapter
import androidx.camera.camera2.pipe.integration.adapter.SessionConfigAdapter.Companion.toCamera2ImplConfig
+import androidx.camera.camera2.pipe.integration.compat.workaround.CapturePipelineTorchCorrection
import androidx.camera.camera2.pipe.integration.impl.CameraCallbackMap
import androidx.camera.camera2.pipe.integration.impl.CameraInteropStateCallbackRepository
+import androidx.camera.camera2.pipe.integration.impl.CapturePipeline
import androidx.camera.camera2.pipe.integration.impl.CapturePipelineImpl
import androidx.camera.camera2.pipe.integration.impl.ComboRequestListener
import androidx.camera.camera2.pipe.integration.impl.UseCaseCamera
@@ -52,14 +54,27 @@
/** Dependency bindings for building a [UseCaseCamera] */
@Module(
includes = [
- CapturePipelineImpl.Bindings::class,
UseCaseCameraImpl.Bindings::class,
UseCaseCameraRequestControlImpl.Bindings::class,
]
)
abstract class UseCaseCameraModule {
// Used for dagger provider methods that are static.
- companion object
+ companion object {
+
+ @UseCaseCameraScope
+ @Provides
+ fun provideCapturePipeline(
+ capturePipelineImpl: CapturePipelineImpl,
+ capturePipelineTorchCorrection: CapturePipelineTorchCorrection
+ ): CapturePipeline {
+ if (CapturePipelineTorchCorrection.isEnabled) {
+ return capturePipelineTorchCorrection
+ }
+
+ return capturePipelineImpl
+ }
+ }
}
/** Dagger module for binding the [UseCase]'s to the [UseCaseCamera]. */
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/CapturePipeline.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/CapturePipeline.kt
index a3ee59e..9da5b32 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/CapturePipeline.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/CapturePipeline.kt
@@ -63,8 +63,6 @@
import androidx.camera.core.ImageCapture.FlashType
import androidx.camera.core.ImageCaptureException
import androidx.camera.core.TorchState
-import dagger.Binds
-import dagger.Module
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import kotlinx.coroutines.CompletableDeferred
@@ -321,13 +319,6 @@
flashType == FLASH_TYPE_USE_TORCH_AS_FLASH ||
useTorchAsFlash.shouldUseTorchAsFlash()
}
-
- @Module
- abstract class Bindings {
- @UseCaseCameraScope
- @Binds
- abstract fun provideCapturePipeline(capturePipeline: CapturePipelineImpl): CapturePipeline
- }
}
/**
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraStateAdapterTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraStateAdapterTest.kt
index 4f159bd..bc7dddf 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraStateAdapterTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraStateAdapterTest.kt
@@ -25,6 +25,9 @@
import androidx.camera.camera2.pipe.GraphState.GraphStateStopping
import androidx.camera.camera2.pipe.integration.testing.FakeCameraGraph
import androidx.camera.core.CameraState
+import androidx.camera.core.CameraState.ERROR_CAMERA_DISABLED
+import androidx.camera.core.CameraState.ERROR_MAX_CAMERAS_IN_USE
+import androidx.camera.core.CameraState.ERROR_OTHER_RECOVERABLE_ERROR
import androidx.camera.core.impl.CameraInternal
import com.google.common.truth.Truth.assertThat
import org.junit.Test
@@ -78,12 +81,16 @@
CameraInternal.State.OPENING,
GraphStateError(CameraError.ERROR_CAMERA_LIMIT_EXCEEDED, willAttemptRetry = true)
)
- // TODO(b/263201241): Add tests for PENDING_OPEN transitions.
- val nextStateWhenGraphStateErrorWillNotRetry =
+ val nextStateWhenGraphStateErrorRecoverableWillNotRetry =
cameraStateAdapter.calculateNextState(
CameraInternal.State.OPENING,
GraphStateError(CameraError.ERROR_CAMERA_LIMIT_EXCEEDED, willAttemptRetry = false)
)
+ val nextStateWhenGraphStateErrorUnrecoverableWillNotRetry =
+ cameraStateAdapter.calculateNextState(
+ CameraInternal.State.OPENING,
+ GraphStateError(CameraError.ERROR_CAMERA_DISABLED, willAttemptRetry = false)
+ )
assertThat(nextStateWhenGraphStateStarting).isEqualTo(null)
assertThat(nextStateWhenGraphStateStarted!!.state).isEqualTo(CameraInternal.State.OPEN)
@@ -92,15 +99,12 @@
assertThat(nextStateWhenGraphStateErrorWillRetry!!.state).isEqualTo(
CameraInternal.State.OPENING
)
- assertThat(nextStateWhenGraphStateErrorWillRetry.error!!.code).isEqualTo(
- CameraState.ERROR_MAX_CAMERAS_IN_USE
+ assertThat(nextStateWhenGraphStateErrorRecoverableWillNotRetry!!.state).isEqualTo(
+ CameraInternal.State.PENDING_OPEN
)
- assertThat(nextStateWhenGraphStateErrorWillNotRetry!!.state).isEqualTo(
+ assertThat(nextStateWhenGraphStateErrorUnrecoverableWillNotRetry!!.state).isEqualTo(
CameraInternal.State.CLOSING
)
- assertThat(nextStateWhenGraphStateErrorWillNotRetry.error!!.code).isEqualTo(
- CameraState.ERROR_MAX_CAMERAS_IN_USE
- )
}
@Test
@@ -113,18 +117,27 @@
cameraStateAdapter.calculateNextState(CameraInternal.State.OPEN, GraphStateStopping)
val nextStateWhenGraphStateStopped =
cameraStateAdapter.calculateNextState(CameraInternal.State.OPEN, GraphStateStopped)
- // TODO(b/263201241): Add tests when we handle errors while camera is already opened.
- val nextStateWhenGraphStateError =
+ val nextStateWhenGraphStateErrorRecoverable =
cameraStateAdapter.calculateNextState(
CameraInternal.State.OPEN,
GraphStateError(CameraError.ERROR_CAMERA_LIMIT_EXCEEDED, true)
)
+ val nextStateWhenGraphStateErrorUnrecoverable =
+ cameraStateAdapter.calculateNextState(
+ CameraInternal.State.OPEN,
+ GraphStateError(CameraError.ERROR_CAMERA_DISABLED, true)
+ )
assertThat(nextStateWhenGraphStateStarting).isEqualTo(null)
assertThat(nextStateWhenGraphStateStarted).isEqualTo(null)
assertThat(nextStateWhenGraphStateStopping!!.state).isEqualTo(CameraInternal.State.CLOSING)
assertThat(nextStateWhenGraphStateStopped!!.state).isEqualTo(CameraInternal.State.CLOSED)
- assertThat(nextStateWhenGraphStateError).isEqualTo(null)
+ assertThat(nextStateWhenGraphStateErrorRecoverable!!.state).isEqualTo(
+ CameraInternal.State.PENDING_OPEN
+ )
+ assertThat(nextStateWhenGraphStateErrorUnrecoverable!!.state).isEqualTo(
+ CameraInternal.State.CLOSED
+ )
}
@Test
@@ -147,7 +160,8 @@
assertThat(nextStateWhenGraphStateStarted).isEqualTo(null)
assertThat(nextStateWhenGraphStateStopping).isEqualTo(null)
assertThat(nextStateWhenGraphStateStopped!!.state).isEqualTo(CameraInternal.State.CLOSED)
- assertThat(nextStateWhenGraphStateError).isEqualTo(null)
+ assertThat(nextStateWhenGraphStateError!!.state).isEqualTo(CameraInternal.State.CLOSING)
+ assertThat(nextStateWhenGraphStateError.error?.code).isEqualTo(ERROR_MAX_CAMERAS_IN_USE)
}
@Test
@@ -205,4 +219,115 @@
cameraStateAdapter.onGraphStateUpdated(cameraGraph1, GraphStateStarting)
assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.OPEN)
}
+
+ @Test
+ fun testStateTransitionsOnRecoverableErrorsWhenOpening() {
+ cameraStateAdapter.onGraphUpdated(cameraGraph1)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.CLOSED)
+
+ cameraStateAdapter.onGraphStateUpdated(cameraGraph1, GraphStateStarting)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.OPENING)
+
+ // We should transition to OPENING with an error code if we encounter errors during opening.
+ cameraStateAdapter.onGraphStateUpdated(
+ cameraGraph1,
+ GraphStateError(CameraError.ERROR_CAMERA_DISCONNECTED, willAttemptRetry = true)
+ )
+ val cameraStateWillRetry = cameraStateAdapter.cameraState.value!!
+ assertThat(cameraStateWillRetry.type).isEqualTo(CameraState.Type.OPENING)
+ assertThat(cameraStateWillRetry.error?.code).isEqualTo(ERROR_OTHER_RECOVERABLE_ERROR)
+
+ // Now assume we've exceeded retries and will no longer retry.
+ cameraStateAdapter.onGraphStateUpdated(
+ cameraGraph1,
+ GraphStateError(CameraError.ERROR_CAMERA_DISCONNECTED, willAttemptRetry = false)
+ )
+ val cameraStateNotRetry = cameraStateAdapter.cameraState.value!!
+ assertThat(cameraStateNotRetry.type).isEqualTo(CameraState.Type.PENDING_OPEN)
+ assertThat(cameraStateNotRetry.error?.code).isEqualTo(ERROR_OTHER_RECOVERABLE_ERROR)
+
+ // Now we make sure we transition to OPENING and OPEN when the camera does eventually open
+ // when it becomes available.
+ cameraStateAdapter.onGraphStateUpdated(cameraGraph1, GraphStateStarting)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.OPENING)
+
+ cameraStateAdapter.onGraphStateUpdated(cameraGraph1, GraphStateStarted)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.OPEN)
+ }
+
+ @Test
+ fun testStateTransitionsOnUnrecoverableErrorsWhenOpening() {
+ cameraStateAdapter.onGraphUpdated(cameraGraph1)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.CLOSED)
+
+ cameraStateAdapter.onGraphStateUpdated(cameraGraph1, GraphStateStarting)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.OPENING)
+
+ cameraStateAdapter.onGraphStateUpdated(
+ cameraGraph1,
+ GraphStateError(CameraError.ERROR_CAMERA_DISABLED, willAttemptRetry = false)
+ )
+ val cameraState = cameraStateAdapter.cameraState.value!!
+ assertThat(cameraState.type).isEqualTo(CameraState.Type.CLOSING)
+ assertThat(cameraState.error?.code).isEqualTo(ERROR_CAMERA_DISABLED)
+ }
+
+ @Test
+ fun testStateTransitionsOnRecoverableErrorsWhenOpen() {
+ cameraStateAdapter.onGraphUpdated(cameraGraph1)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.CLOSED)
+
+ cameraStateAdapter.onGraphStateUpdated(cameraGraph1, GraphStateStarting)
+ cameraStateAdapter.onGraphStateUpdated(cameraGraph1, GraphStateStarted)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.OPEN)
+
+ // We should transition to OPENING with an error code if we encounter errors during opening.
+ cameraStateAdapter.onGraphStateUpdated(
+ cameraGraph1,
+ GraphStateError(CameraError.ERROR_CAMERA_DISCONNECTED, willAttemptRetry = false)
+ )
+ val cameraState = cameraStateAdapter.cameraState.value!!
+ assertThat(cameraState.type).isEqualTo(CameraState.Type.PENDING_OPEN)
+ assertThat(cameraState.error?.code).isEqualTo(ERROR_OTHER_RECOVERABLE_ERROR)
+ }
+
+ @Test
+ fun testStateTransitionsOnUnrecoverableErrorsWhenOpen() {
+ cameraStateAdapter.onGraphUpdated(cameraGraph1)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.CLOSED)
+
+ cameraStateAdapter.onGraphStateUpdated(cameraGraph1, GraphStateStarting)
+ cameraStateAdapter.onGraphStateUpdated(cameraGraph1, GraphStateStarted)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.OPEN)
+
+ cameraStateAdapter.onGraphStateUpdated(
+ cameraGraph1,
+ GraphStateError(CameraError.ERROR_CAMERA_DISABLED, willAttemptRetry = false)
+ )
+ val cameraState = cameraStateAdapter.cameraState.value!!
+ assertThat(cameraState.type).isEqualTo(CameraState.Type.CLOSED)
+ assertThat(cameraState.error?.code).isEqualTo(ERROR_CAMERA_DISABLED)
+ }
+
+ @Test
+ fun testStateTransitionsOnErrorsWhenClosing() {
+ cameraStateAdapter.onGraphUpdated(cameraGraph1)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.CLOSED)
+
+ cameraStateAdapter.onGraphStateUpdated(cameraGraph1, GraphStateStarting)
+ cameraStateAdapter.onGraphStateUpdated(cameraGraph1, GraphStateStarted)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.OPEN)
+
+ cameraStateAdapter.onGraphStateUpdated(cameraGraph1, GraphStateStopping)
+ assertThat(cameraStateAdapter.cameraState.value?.type).isEqualTo(CameraState.Type.CLOSING)
+
+ // We should update the CLOSING state to include an error code.
+ cameraStateAdapter.onGraphStateUpdated(
+ cameraGraph1,
+ GraphStateError(CameraError.ERROR_CAMERA_DISCONNECTED, willAttemptRetry = false)
+ )
+ val cameraState = cameraStateAdapter.cameraState.value!!
+ assertThat(cameraState.type).isEqualTo(CameraState.Type.CLOSING)
+ assertThat(cameraState.error?.code).isEqualTo(ERROR_OTHER_RECOVERABLE_ERROR)
+ }
}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombinationTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombinationTest.kt
index 7e27ce2..c43b7f8 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombinationTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombinationTest.kt
@@ -51,6 +51,7 @@
import androidx.camera.core.UseCase
import androidx.camera.core.concurrent.CameraCoordinator
import androidx.camera.core.impl.AttachedSurfaceInfo
+import androidx.camera.core.impl.CameraMode
import androidx.camera.core.impl.CameraThreadConfig
import androidx.camera.core.impl.EncoderProfilesProxy
import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy
@@ -195,7 +196,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isTrue()
}
@@ -210,7 +211,7 @@
)
val combinationList = getLegacySupportedCombinationList()
val isSupported = isAllSubConfigListSupported(
- false, supportedSurfaceCombination, combinationList
+ CameraMode.DEFAULT, supportedSurfaceCombination, combinationList
)
assertThat(isSupported).isTrue()
}
@@ -226,7 +227,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isFalse()
}
@@ -243,7 +244,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isFalse()
}
@@ -260,7 +261,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isFalse()
}
@@ -277,7 +278,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isTrue()
}
@@ -292,7 +293,7 @@
)
val combinationList = getLimitedSupportedCombinationList()
val isSupported = isAllSubConfigListSupported(
- false, supportedSurfaceCombination, combinationList
+ CameraMode.DEFAULT, supportedSurfaceCombination, combinationList
)
assertThat(isSupported).isTrue()
}
@@ -308,7 +309,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isFalse()
}
@@ -325,7 +326,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isFalse()
}
@@ -342,7 +343,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isTrue()
}
@@ -357,7 +358,7 @@
)
val combinationList = getFullSupportedCombinationList()
val isSupported = isAllSubConfigListSupported(
- false, supportedSurfaceCombination, combinationList
+ CameraMode.DEFAULT, supportedSurfaceCombination, combinationList
)
assertThat(isSupported).isTrue()
}
@@ -373,7 +374,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isFalse()
}
@@ -393,7 +394,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isTrue()
}
@@ -413,7 +414,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isTrue()
}
@@ -433,7 +434,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isTrue()
}
@@ -453,7 +454,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isTrue()
}
@@ -470,7 +471,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- false, combination.surfaceConfigList
+ CameraMode.DEFAULT, combination.surfaceConfigList
)
assertThat(isSupported).isTrue()
}
@@ -485,7 +486,7 @@
)
val combinationList = getLevel3SupportedCombinationList()
val isSupported = isAllSubConfigListSupported(
- false, supportedSurfaceCombination, combinationList
+ CameraMode.DEFAULT, supportedSurfaceCombination, combinationList
)
assertThat(isSupported).isTrue()
}
@@ -504,7 +505,7 @@
for (combination in combinationList) {
val isSupported =
supportedSurfaceCombination.checkSupported(
- true, combination.surfaceConfigList
+ CameraMode.CONCURRENT_CAMERA, combination.surfaceConfigList
)
assertThat(isSupported).isTrue()
}
@@ -522,11 +523,59 @@
)
val combinationList = getConcurrentSupportedCombinationList()
val isSupported = isAllSubConfigListSupported(
- true, supportedSurfaceCombination, combinationList
+ CameraMode.CONCURRENT_CAMERA, supportedSurfaceCombination, combinationList
)
assertThat(isSupported).isTrue()
}
+ @Test
+ @Config(minSdk = Build.VERSION_CODES.S)
+ fun checkUltraHighResolutionSurfaceCombinationSupportedInUltraHighCameraMode() {
+ setupCamera(
+ maximumResolutionSupportedSizes = maximumResolutionSupportedSizes,
+ maximumResolutionHighResolutionSupportedSizes =
+ maximumResolutionHighResolutionSupportedSizes,
+ capabilities = intArrayOf(
+ CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR
+ )
+ )
+ val supportedSurfaceCombination = SupportedSurfaceCombination(
+ context, fakeCameraMetadata,
+ mockEncoderProfilesAdapter
+ )
+ GuaranteedConfigurationsUtil.getUltraHighResolutionSupportedCombinationList().forEach {
+ assertThat(
+ supportedSurfaceCombination.checkSupported(
+ CameraMode.ULTRA_HIGH_RESOLUTION_CAMERA, it.surfaceConfigList
+ )
+ ).isTrue()
+ }
+ }
+
+ @Test
+ @Config(minSdk = Build.VERSION_CODES.S)
+ fun checkUltraHighResolutionSurfaceCombinationSubListSupportedInUltraHighCameraMode() {
+ setupCamera(
+ maximumResolutionSupportedSizes = maximumResolutionSupportedSizes,
+ maximumResolutionHighResolutionSupportedSizes =
+ maximumResolutionHighResolutionSupportedSizes,
+ capabilities = intArrayOf(
+ CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR
+ )
+ )
+ val supportedSurfaceCombination = SupportedSurfaceCombination(
+ context, fakeCameraMetadata,
+ mockEncoderProfilesAdapter
+ )
+ GuaranteedConfigurationsUtil.getUltraHighResolutionSupportedCombinationList().also {
+ assertThat(
+ isAllSubConfigListSupported(
+ CameraMode.ULTRA_HIGH_RESOLUTION_CAMERA, supportedSurfaceCombination, it
+ )
+ ).isTrue()
+ }
+ }
+
// //////////////////////////////////////////////////////////////////////////////////////////
//
// Surface config transformation tests
@@ -541,7 +590,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.YUV_420_888, vgaSize
)
val expectedSurfaceConfig =
@@ -557,7 +606,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.YUV_420_888, previewSize
)
val expectedSurfaceConfig =
@@ -573,7 +622,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.YUV_420_888, recordSize
)
val expectedSurfaceConfig =
@@ -589,7 +638,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.YUV_420_888, maximumSize
)
val expectedSurfaceConfig =
@@ -605,7 +654,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.JPEG, vgaSize
)
val expectedSurfaceConfig =
@@ -621,7 +670,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.JPEG, previewSize
)
val expectedSurfaceConfig =
@@ -637,7 +686,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.JPEG, recordSize
)
val expectedSurfaceConfig =
@@ -653,7 +702,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.JPEG, maximumSize
)
val expectedSurfaceConfig =
@@ -671,7 +720,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- true,
+ CameraMode.CONCURRENT_CAMERA,
ImageFormat.PRIVATE, SizeUtil.RESOLUTION_720P
)
val expectedSurfaceConfig =
@@ -689,7 +738,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- true,
+ CameraMode.CONCURRENT_CAMERA,
ImageFormat.YUV_420_888, SizeUtil.RESOLUTION_720P
)
val expectedSurfaceConfig =
@@ -707,7 +756,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- true,
+ CameraMode.CONCURRENT_CAMERA,
ImageFormat.JPEG, SizeUtil.RESOLUTION_720P
)
val expectedSurfaceConfig =
@@ -725,7 +774,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- true,
+ CameraMode.CONCURRENT_CAMERA,
ImageFormat.PRIVATE, RESOLUTION_1440P
)
val expectedSurfaceConfig =
@@ -743,7 +792,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- true,
+ CameraMode.CONCURRENT_CAMERA,
ImageFormat.YUV_420_888, RESOLUTION_1440P
)
val expectedSurfaceConfig =
@@ -761,7 +810,7 @@
mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- true,
+ CameraMode.CONCURRENT_CAMERA,
ImageFormat.JPEG, RESOLUTION_1440P
)
val expectedSurfaceConfig =
@@ -786,7 +835,7 @@
)
assertThat(
supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.PRIVATE, ultraHighMaximumSize
)
).isEqualTo(
@@ -797,7 +846,7 @@
)
assertThat(
supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.YUV_420_888, ultraHighMaximumSize
)
).isEqualTo(
@@ -808,7 +857,7 @@
)
assertThat(
supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.JPEG, ultraHighMaximumSize
)
).isEqualTo(
@@ -1519,7 +1568,7 @@
val useCaseConfigToOutputSizesMap =
getUseCaseConfigToOutputSizesMap(useCaseConfigMap.values.toList())
val suggestedStreamSpecs = supportedSurfaceCombination.getSuggestedStreamSpecifications(
- false,
+ CameraMode.DEFAULT,
attachedSurfaceInfoList,
useCaseConfigToOutputSizesMap
)
@@ -1835,7 +1884,7 @@
}
private fun isAllSubConfigListSupported(
- isConcurrentCameraModeOn: Boolean,
+ cameraMode: Int,
supportedSurfaceCombination: SupportedSurfaceCombination,
combinationList: List<SurfaceCombination>
): Boolean {
@@ -1849,7 +1898,7 @@
val subConfigurationList: MutableList<SurfaceConfig> = ArrayList(configList)
subConfigurationList.removeAt(index)
val isSupported = supportedSurfaceCombination.checkSupported(
- isConcurrentCameraModeOn, subConfigurationList
+ cameraMode, subConfigurationList
)
if (!isSupported) {
return false
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/CapturePipelineTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/CapturePipelineTest.kt
index af6bcfe..34b3175 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/CapturePipelineTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/CapturePipelineTest.kt
@@ -37,6 +37,7 @@
import androidx.camera.camera2.pipe.integration.adapter.CameraStateAdapter
import androidx.camera.camera2.pipe.integration.adapter.RobolectricCameraPipeTestRunner
import androidx.camera.camera2.pipe.integration.adapter.asListenableFuture
+import androidx.camera.camera2.pipe.integration.compat.workaround.CapturePipelineTorchCorrection
import androidx.camera.camera2.pipe.integration.compat.workaround.NoOpAutoFlashAEModeDisabler
import androidx.camera.camera2.pipe.integration.compat.workaround.NotUseTorchAsFlash
import androidx.camera.camera2.pipe.integration.compat.workaround.UseTorchAsFlashImpl
@@ -193,7 +194,7 @@
}
private lateinit var torchControl: TorchControl
- private lateinit var capturePipeline: CapturePipeline
+ private lateinit var capturePipeline: CapturePipelineImpl
private lateinit var fakeUseCaseCameraState: UseCaseCameraState
@@ -226,13 +227,13 @@
)
capturePipeline = CapturePipelineImpl(
- torchControl = torchControl,
- threads = fakeUseCaseThreads,
- requestListener = comboRequestListener,
cameraProperties = fakeCameraProperties,
- useTorchAsFlash = NotUseTorchAsFlash,
+ requestListener = comboRequestListener,
+ threads = fakeUseCaseThreads,
+ torchControl = torchControl,
useCaseGraphConfig = fakeUseCaseGraphConfig,
- useCaseCameraState = fakeUseCaseCameraState
+ useCaseCameraState = fakeUseCaseCameraState,
+ useTorchAsFlash = NotUseTorchAsFlash,
)
}
@@ -343,13 +344,13 @@
private suspend fun withTorchAsFlashQuirk_shouldOpenTorch(imageCaptureMode: Int) {
// Arrange.
capturePipeline = CapturePipelineImpl(
- torchControl = torchControl,
- threads = fakeUseCaseThreads,
- requestListener = comboRequestListener,
- useTorchAsFlash = UseTorchAsFlashImpl,
cameraProperties = fakeCameraProperties,
+ requestListener = comboRequestListener,
+ threads = fakeUseCaseThreads,
+ torchControl = torchControl,
useCaseGraphConfig = fakeUseCaseGraphConfig,
useCaseCameraState = fakeUseCaseCameraState,
+ useTorchAsFlash = UseTorchAsFlashImpl,
)
val requestList = mutableListOf<Request>()
@@ -725,6 +726,58 @@
).isFalse()
}
+ @Test
+ fun torchAsFlash_torchCorrection_shouldTurnsTorchOffOn(): Unit = runBlocking {
+ torchStateCorrectionTest(ImageCapture.FLASH_TYPE_USE_TORCH_AS_FLASH)
+ }
+
+ @Test
+ fun defaultCapture_torchCorrection_shouldTurnsTorchOffOn(): Unit = runBlocking {
+ torchStateCorrectionTest(ImageCapture.FLASH_TYPE_ONE_SHOT_FLASH)
+ }
+
+ private suspend fun torchStateCorrectionTest(flashType: Int) {
+ // Arrange.
+ torchControl.setTorchAsync(torch = true).join()
+ verifyTorchState(true)
+
+ val requestList = mutableListOf<Request>()
+ fakeCameraGraphSession.requestHandler = { requests ->
+ requestList.addAll(requests)
+ }
+ val capturePipelineTorchCorrection = CapturePipelineTorchCorrection(
+ capturePipelineImpl = capturePipeline,
+ threads = fakeUseCaseThreads,
+ torchControl = torchControl,
+ )
+
+ // Act.
+ capturePipelineTorchCorrection.submitStillCaptures(
+ requests = listOf(singleRequest),
+ captureMode = ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY,
+ flashMode = ImageCapture.FLASH_MODE_ON,
+ flashType = flashType,
+ )
+
+ assertThat(fakeCameraGraphSession.submitSemaphore.tryAcquire(5, TimeUnit.SECONDS)).isTrue()
+ assertThat(fakeRequestControl.setTorchSemaphore.tryAcquire(1, TimeUnit.SECONDS)).isFalse()
+ // Complete the capture request.
+ requestList.complete()
+
+ // Assert, the Torch should be turned off, and then turned on.
+ verifyTorchState(false)
+ verifyTorchState(true)
+ // No more invocation to set Torch mode.
+ assertThat(fakeRequestControl.torchUpdateEventList.size).isEqualTo(0)
+ }
+
+ private fun verifyTorchState(state: Boolean) {
+ assertThat(
+ fakeRequestControl.setTorchSemaphore.tryAcquire(5, TimeUnit.SECONDS)
+ ).isTrue()
+ assertThat(fakeRequestControl.torchUpdateEventList.removeFirst() == state).isTrue()
+ }
+
// TODO(wenhungteng@): Porting overrideAeModeForStillCapture_quirkAbsent_notOverride,
// overrideAeModeForStillCapture_aePrecaptureStarted_override,
// overrideAeModeForStillCapture_aePrecaptureFinish_notOverride,
diff --git a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/CameraControllerSimulator.kt b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/CameraControllerSimulator.kt
index 6f6f637..a8b6841 100644
--- a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/CameraControllerSimulator.kt
+++ b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/CameraControllerSimulator.kt
@@ -22,6 +22,7 @@
import androidx.camera.camera2.pipe.CameraController
import androidx.camera.camera2.pipe.CameraGraph
import androidx.camera.camera2.pipe.CameraId
+import androidx.camera.camera2.pipe.CameraStatusMonitor
import androidx.camera.camera2.pipe.GraphState.GraphStateError
import androidx.camera.camera2.pipe.StreamGraph
import androidx.camera.camera2.pipe.StreamId
@@ -163,7 +164,7 @@
}
}
- override fun tryRestart() {
+ override fun tryRestart(cameraStatus: CameraStatusMonitor.CameraStatus) {
synchronized(lock) {
check(!closed) {
"Attempted to invoke restart after close."
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraController.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraController.kt
index 29dee61..2271494 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraController.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraController.kt
@@ -53,10 +53,10 @@
/**
* Restart the current session. This should basically perform stop() then start(). However, the
- * implementation should handle its internal states correctly, and only restart when the
- * conditions are appropriate.
+ * implementation should handle its internal states correctly, and only restart under the right
+ * [CameraStatusMonitor.CameraStatus] and [ControllerState].
*/
- fun tryRestart()
+ fun tryRestart(cameraStatus: CameraStatusMonitor.CameraStatus)
/**
* Close this instance. [start] and [stop] should not be invoked, and any additional calls will
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraError.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraError.kt
index aac3027..b191c82 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraError.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraError.kt
@@ -23,6 +23,7 @@
import android.hardware.camera2.CameraAccessException.CAMERA_IN_USE
import android.hardware.camera2.CameraAccessException.MAX_CAMERAS_IN_USE
import android.hardware.camera2.CameraDevice.StateCallback
+import android.os.Build
import androidx.annotation.RequiresApi
@JvmInline
@@ -87,13 +88,30 @@
/** This indicates that we received SecurityException while opening the camera. */
val ERROR_SECURITY_EXCEPTION = CameraError(8)
+ /**
+ * This indicates we've encountered an error while configuring our camera graph, such as
+ * creating, finalizing capture sessions, and creating, submitting capture requests.
+ */
+ val ERROR_GRAPH_CONFIG = CameraError(9)
+
+ /**
+ * The camera cannot be opened because Do Not Disturb (DND) mode is on. This is actually
+ * a quirk for legacy devices on P, where we encounter RuntimeExceptions while opening the
+ * camera when it tries to enable shutter sound.
+ */
+ val ERROR_DO_NOT_DISTURB_ENABLED = CameraError(10)
+
internal fun from(throwable: Throwable) =
when (throwable) {
is CameraAccessException -> from(throwable)
is IllegalArgumentException -> ERROR_ILLEGAL_ARGUMENT_EXCEPTION
is SecurityException -> ERROR_SECURITY_EXCEPTION
else -> {
- throw IllegalArgumentException("Unexpected throwable: $throwable")
+ if (Build.VERSION.SDK_INT == 28 && isDoNotDisturbException(throwable)) {
+ ERROR_DO_NOT_DISTURB_ENABLED
+ } else {
+ throw IllegalArgumentException("Unexpected throwable: $throwable")
+ }
}
}
@@ -124,5 +142,28 @@
)
}
}
+
+ /**
+ * The full stack trace of the Do Not Disturb exception on API level 28 is as follows:
+ *
+ * java.lang.RuntimeException: Camera is being used after Camera.release() was called
+ * at android.hardware.Camera._enableShutterSound(Native Method)
+ * at android.hardware.Camera.updateAppOpsPlayAudio(Camera.java:1770)
+ * at android.hardware.Camera.initAppOps(Camera.java:582)
+ * at android.hardware.Camera.<init>(Camera.java:575)
+ * at android.hardware.Camera.getEmptyParameters(Camera.java:2130)
+ * at android.hardware.camera2.legacy.LegacyMetadataMapper.createCharacteristics
+ * (LegacyMetadataMapper.java:151)
+ * at android.hardware.camera2.CameraManager.getCameraCharacteristics
+ * (CameraManager.java:274)
+ *
+ * This function checks whether the method name of the top element is "_enableShutterSound".
+ */
+ private fun isDoNotDisturbException(throwable: Throwable): Boolean {
+ if (throwable !is RuntimeException) return false
+ val topMethodName =
+ throwable.stackTrace.let { if (it.isNotEmpty()) it[0].methodName else null }
+ return topMethodName == "_enableShutterSound"
+ }
}
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraGraph.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraGraph.kt
index 53ab8b0..37d48e4e 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraGraph.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraGraph.kt
@@ -380,5 +380,8 @@
* will retry opening the camera (and creating a capture session).
*/
class GraphStateError(val cameraError: CameraError, val willAttemptRetry: Boolean) :
- GraphState()
-}
+ GraphState() {
+ override fun toString(): String =
+ super.toString() + "(cameraError = $cameraError, willAttemptRetry = $willAttemptRetry)"
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CaptureSequenceProcessor.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CaptureSequenceProcessor.kt
index 9c6cc07..facca9b 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CaptureSequenceProcessor.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CaptureSequenceProcessor.kt
@@ -51,7 +51,7 @@
): TCaptureSequence?
/** Issue a previously created [CaptureSequence] to the active camera instance. */
- fun submit(captureSequence: TCaptureSequence): Int
+ fun submit(captureSequence: TCaptureSequence): Int?
/**
* Opportunistically abort any ongoing captures by the camera. This may or may not complete
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraController.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraController.kt
index 5ddaf29..0a4c5a5 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraController.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraController.kt
@@ -24,6 +24,7 @@
import androidx.camera.camera2.pipe.CameraError
import androidx.camera.camera2.pipe.CameraGraph
import androidx.camera.camera2.pipe.CameraId
+import androidx.camera.camera2.pipe.CameraStatusMonitor.CameraStatus
import androidx.camera.camera2.pipe.CameraSurfaceManager
import androidx.camera.camera2.pipe.StreamId
import androidx.camera.camera2.pipe.config.Camera2ControllerScope
@@ -66,6 +67,9 @@
@GuardedBy("lock")
private var controllerState: ControllerState = ControllerState.STOPPED
+ @GuardedBy("lock")
+ private var lastCameraError: CameraError? = null
+
private var currentCamera: VirtualCamera? = null
private var currentSession: CaptureSessionState? = null
private var currentSurfaceMap: Map<StreamId, Surface>? = null
@@ -80,6 +84,7 @@
Log.warn { "Ignoring start(): Camera2CameraController is already started" }
return
}
+ lastCameraError = null
val camera = virtualCameraManager.open(
config.camera,
config.flags.allowMultipleActiveCameras,
@@ -135,11 +140,30 @@
}
}
- override fun tryRestart(): Unit = synchronized(lock) {
- if (controllerState != ControllerState.DISCONNECTED) {
- Log.debug { "Ignoring restart(): CameraController is $controllerState" }
+ override fun tryRestart(cameraStatus: CameraStatus): Unit = synchronized(lock) {
+ var shouldRestart = false
+ when (controllerState) {
+ ControllerState.DISCONNECTED ->
+ if (cameraStatus is CameraStatus.CameraAvailable ||
+ cameraStatus is CameraStatus.CameraPrioritiesChanged
+ ) {
+ shouldRestart = true
+ }
+
+ ControllerState.ERROR ->
+ if (cameraStatus is CameraStatus.CameraAvailable &&
+ lastCameraError == CameraError.ERROR_CAMERA_DEVICE
+ ) {
+ shouldRestart = true
+ }
+ }
+ if (!shouldRestart) {
+ Log.debug {
+ "Ignoring tryRestart(): state = $controllerState, cameraStatus = $cameraStatus"
+ }
return
}
+ Log.debug { "Restarting Camera2CameraController" }
stop()
start()
}
@@ -222,6 +246,7 @@
"unrecoverable error: ${cameraState.cameraErrorCode}"
}
}
+ lastCameraError = cameraState.cameraErrorCode
} else {
controllerState = ControllerState.STOPPED
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessor.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessor.kt
index b6be643..73418c4 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessor.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessor.kt
@@ -124,10 +124,8 @@
// null
// if the CameraDevice has been closed or disconnected. If this fails, indicate that the
// request was not submitted.
- val requestBuilder: CaptureRequest.Builder
- try {
- requestBuilder = session.device.createCaptureRequest(requestTemplate)
- } catch (exception: ObjectUnavailableException) {
+ val requestBuilder = session.device.createCaptureRequest(requestTemplate)
+ if (requestBuilder == null) {
Log.info { " Failed to create a CaptureRequest.Builder from $requestTemplate!" }
return null
}
@@ -247,7 +245,7 @@
)
}
- override fun submit(captureSequence: Camera2CaptureSequence): Int {
+ override fun submit(captureSequence: Camera2CaptureSequence): Int? {
val captureCallback = captureSequence as CameraCaptureSession.CaptureCallback
// TODO: Update these calls to use executors on newer versions of the OS
return if (captureSequence.captureRequestList.size == 1 &&
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2ErrorProcessor.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2ErrorProcessor.kt
new file mode 100644
index 0000000..bfae20a
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2ErrorProcessor.kt
@@ -0,0 +1,68 @@
+/*
+ * 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.camera2.pipe.compat
+
+import androidx.annotation.GuardedBy
+import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraError
+import androidx.camera.camera2.pipe.CameraId
+import androidx.camera.camera2.pipe.GraphState
+import androidx.camera.camera2.pipe.internal.CameraErrorListener
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/**
+ * A class responsible for reporting camera errors with a particular [CameraId]. When
+ * [androidx.camera.camera2.pipe.compat.VirtualCameraManager] processes a camera open request, it
+ * should update CameraErrorProcessor with the [VirtualCameraState] that came with the open request.
+ */
+@Singleton
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+class Camera2ErrorProcessor @Inject constructor() : CameraErrorListener {
+ private val lock = Any()
+
+ @GuardedBy("lock")
+ private val virtualCameraStateMap = mutableMapOf<CameraId, VirtualCameraState>()
+
+ override fun onCameraError(
+ cameraId: CameraId,
+ cameraError: CameraError,
+ willAttemptRetry: Boolean
+ ) {
+ val virtualCameraState = synchronized(lock) {
+ virtualCameraStateMap[cameraId]
+ } ?: return
+ virtualCameraState.graphListener.onGraphError(
+ GraphState.GraphStateError(
+ cameraError,
+ willAttemptRetry
+ )
+ )
+ }
+
+ /**
+ * Sets the current active [VirtualCameraState] to report the camera error to. Any attempt to
+ * acquire an open camera creates a [VirtualCameraState], and it's important to keep
+ * Camera2ErrorProcessor updated with the latest [VirtualCameraState].
+ */
+ internal fun setActiveVirtualCamera(
+ cameraId: CameraId,
+ virtualCameraState: VirtualCameraState
+ ) = synchronized(lock) {
+ virtualCameraStateMap[cameraId] = virtualCameraState
+ }
+}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CameraDeviceWrapper.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CameraDeviceWrapper.kt
index a4461dd..27722eb 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CameraDeviceWrapper.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CameraDeviceWrapper.kt
@@ -37,6 +37,7 @@
import androidx.camera.camera2.pipe.core.SystemTimeSource
import androidx.camera.camera2.pipe.core.Timestamps
import androidx.camera.camera2.pipe.core.Timestamps.formatMs
+import androidx.camera.camera2.pipe.internal.CameraErrorListener
import androidx.camera.camera2.pipe.writeParameter
import kotlin.reflect.KClass
import kotlinx.atomicfu.atomic
@@ -52,64 +53,56 @@
val cameraId: CameraId
/** @see CameraDevice.createCaptureRequest */
- @Throws(ObjectUnavailableException::class)
- fun createCaptureRequest(template: RequestTemplate): CaptureRequest.Builder
+ fun createCaptureRequest(template: RequestTemplate): CaptureRequest.Builder?
/** @see CameraDevice.createReprocessCaptureRequest */
@RequiresApi(Build.VERSION_CODES.M)
- @Throws(ObjectUnavailableException::class)
- fun createReprocessCaptureRequest(inputResult: TotalCaptureResult): CaptureRequest.Builder
+ fun createReprocessCaptureRequest(inputResult: TotalCaptureResult): CaptureRequest.Builder?
/** @see CameraDevice.createCaptureSession */
- @Throws(ObjectUnavailableException::class)
fun createCaptureSession(
outputs: List<Surface>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- )
+ ): Boolean
/** @see CameraDevice.createReprocessableCaptureSession */
@RequiresApi(Build.VERSION_CODES.M)
- @Throws(ObjectUnavailableException::class)
fun createReprocessableCaptureSession(
input: InputConfiguration,
outputs: List<Surface>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- )
+ ): Boolean
/** @see CameraDevice.createConstrainedHighSpeedCaptureSession */
@RequiresApi(Build.VERSION_CODES.M)
- @Throws(ObjectUnavailableException::class)
fun createConstrainedHighSpeedCaptureSession(
outputs: List<Surface>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- )
+ ): Boolean
/** @see CameraDevice.createCaptureSessionByOutputConfigurations */
@RequiresApi(Build.VERSION_CODES.N)
- @Throws(ObjectUnavailableException::class)
fun createCaptureSessionByOutputConfigurations(
outputConfigurations: List<OutputConfigurationWrapper>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- )
+ ): Boolean
/** @see CameraDevice.createReprocessableCaptureSessionByConfigurations */
@RequiresApi(Build.VERSION_CODES.N)
- @Throws(ObjectUnavailableException::class)
fun createReprocessableCaptureSessionByConfigurations(
inputConfig: InputConfigData,
outputs: List<OutputConfigurationWrapper>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- )
+ ): Boolean
/** @see CameraDevice.createCaptureSession */
@RequiresApi(Build.VERSION_CODES.P)
- @Throws(ObjectUnavailableException::class)
- fun createCaptureSession(config: SessionConfigData)
+ fun createCaptureSession(config: SessionConfigData): Boolean
/** Invoked when the [CameraDevice] has been closed */
fun onDeviceClosed()
@@ -138,6 +131,7 @@
private val cameraMetadata: CameraMetadata,
private val cameraDevice: CameraDevice,
override val cameraId: CameraId,
+ private val cameraErrorListener: CameraErrorListener,
private val interopSessionStateCallback: CameraCaptureSession.StateCallback? = null
) : CameraDeviceWrapper {
private val _lastStateCallback = atomic<CameraCaptureSessionWrapper.StateCallback?>(null)
@@ -146,7 +140,7 @@
outputs: List<Surface>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- ) = rethrowCamera2Exceptions {
+ ): Boolean = catchAndReportCameraExceptions(cameraId, cameraErrorListener) {
val previousStateCallback = _lastStateCallback.value
check(_lastStateCallback.compareAndSet(previousStateCallback, stateCallback))
@@ -156,11 +150,15 @@
cameraDevice.createCaptureSession(
outputs,
AndroidCaptureSessionStateCallback(
- this, stateCallback, previousStateCallback, interopSessionStateCallback
+ this,
+ stateCallback,
+ previousStateCallback,
+ cameraErrorListener,
+ interopSessionStateCallback
),
handler
)
- }
+ } != null
@RequiresApi(23)
override fun createReprocessableCaptureSession(
@@ -168,7 +166,7 @@
outputs: List<Surface>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- ) = rethrowCamera2Exceptions {
+ ): Boolean = catchAndReportCameraExceptions(cameraId, cameraErrorListener) {
val previousStateCallback = _lastStateCallback.value
check(_lastStateCallback.compareAndSet(previousStateCallback, stateCallback))
@@ -179,18 +177,22 @@
input,
outputs,
AndroidCaptureSessionStateCallback(
- this, stateCallback, previousStateCallback, interopSessionStateCallback
+ this,
+ stateCallback,
+ previousStateCallback,
+ cameraErrorListener,
+ interopSessionStateCallback
),
handler
)
- }
+ } != null
@RequiresApi(23)
override fun createConstrainedHighSpeedCaptureSession(
outputs: List<Surface>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- ) = rethrowCamera2Exceptions {
+ ): Boolean = catchAndReportCameraExceptions(cameraId, cameraErrorListener) {
val previousStateCallback = _lastStateCallback.value
check(_lastStateCallback.compareAndSet(previousStateCallback, stateCallback))
@@ -200,18 +202,22 @@
cameraDevice,
outputs,
AndroidCaptureSessionStateCallback(
- this, stateCallback, previousStateCallback, interopSessionStateCallback
+ this,
+ stateCallback,
+ previousStateCallback,
+ cameraErrorListener,
+ interopSessionStateCallback
),
handler
)
- }
+ } != null
@RequiresApi(24)
override fun createCaptureSessionByOutputConfigurations(
outputConfigurations: List<OutputConfigurationWrapper>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- ) = rethrowCamera2Exceptions {
+ ): Boolean = catchAndReportCameraExceptions(cameraId, cameraErrorListener) {
val previousStateCallback = _lastStateCallback.value
check(_lastStateCallback.compareAndSet(previousStateCallback, stateCallback))
@@ -221,11 +227,15 @@
cameraDevice,
outputConfigurations.map { it.unwrapAs(OutputConfiguration::class) },
AndroidCaptureSessionStateCallback(
- this, stateCallback, previousStateCallback, interopSessionStateCallback
+ this,
+ stateCallback,
+ previousStateCallback,
+ cameraErrorListener,
+ interopSessionStateCallback
),
handler
)
- }
+ } != null
@RequiresApi(24)
override fun createReprocessableCaptureSessionByConfigurations(
@@ -233,7 +243,7 @@
outputs: List<OutputConfigurationWrapper>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- ) = rethrowCamera2Exceptions {
+ ): Boolean = catchAndReportCameraExceptions(cameraId, cameraErrorListener) {
val previousStateCallback = _lastStateCallback.value
check(_lastStateCallback.compareAndSet(previousStateCallback, stateCallback))
@@ -246,66 +256,75 @@
),
outputs.map { it.unwrapAs(OutputConfiguration::class) },
AndroidCaptureSessionStateCallback(
- this, stateCallback, previousStateCallback, interopSessionStateCallback
+ this,
+ stateCallback,
+ previousStateCallback,
+ cameraErrorListener,
+ interopSessionStateCallback
),
handler
)
- }
+ } != null
@RequiresApi(28)
- override fun createCaptureSession(config: SessionConfigData) = rethrowCamera2Exceptions {
- val stateCallback = config.stateCallback
- val previousStateCallback = _lastStateCallback.value
- check(_lastStateCallback.compareAndSet(previousStateCallback, stateCallback))
+ override fun createCaptureSession(config: SessionConfigData): Boolean =
+ catchAndReportCameraExceptions(cameraId, cameraErrorListener) {
+ val stateCallback = config.stateCallback
+ val previousStateCallback = _lastStateCallback.value
+ check(_lastStateCallback.compareAndSet(previousStateCallback, stateCallback))
- val sessionConfig =
- Api28Compat.newSessionConfiguration(
- config.sessionType,
- config.outputConfigurations.map { it.unwrapAs(OutputConfiguration::class) },
- config.executor,
- AndroidCaptureSessionStateCallback(
- this, stateCallback, previousStateCallback, interopSessionStateCallback
+ val sessionConfig =
+ Api28Compat.newSessionConfiguration(
+ config.sessionType,
+ config.outputConfigurations.map { it.unwrapAs(OutputConfiguration::class) },
+ config.executor,
+ AndroidCaptureSessionStateCallback(
+ this,
+ stateCallback,
+ previousStateCallback,
+ cameraErrorListener,
+ interopSessionStateCallback
+ )
)
- )
- if (config.inputConfiguration != null) {
- Api28Compat.setInputConfiguration(
- sessionConfig,
- Api23Compat.newInputConfiguration(
- config.inputConfiguration.width,
- config.inputConfiguration.height,
- config.inputConfiguration.format
+ if (config.inputConfiguration != null) {
+ Api28Compat.setInputConfiguration(
+ sessionConfig,
+ Api23Compat.newInputConfiguration(
+ config.inputConfiguration.width,
+ config.inputConfiguration.height,
+ config.inputConfiguration.format
+ )
)
- )
- }
-
- val requestBuilder = cameraDevice.createCaptureRequest(config.sessionTemplateId)
-
- // This compares and sets ONLY the session keys for this camera. Setting parameters that are
- // not listed in availableSessionKeys can cause an unusual amount of extra latency.
- val sessionKeyNames = cameraMetadata.sessionKeys.map { it.name }
-
- // Iterate template parameters and CHECK BY NAME, as there have been cases where equality
- // checks did not pass.
- for ((key, value) in config.sessionParameters) {
- if (key !is CaptureRequest.Key<*>) continue
- if (sessionKeyNames.contains(key.name)) {
- requestBuilder.writeParameter(key, value)
}
- }
- Api28Compat.setSessionParameters(sessionConfig, requestBuilder.build())
- Api28Compat.createCaptureSession(cameraDevice, sessionConfig)
- }
- override fun createCaptureRequest(template: RequestTemplate): CaptureRequest.Builder =
- rethrowCamera2Exceptions {
+ val requestBuilder = cameraDevice.createCaptureRequest(config.sessionTemplateId)
+
+ // This compares and sets ONLY the session keys for this camera. Setting parameters that are
+ // not listed in availableSessionKeys can cause an unusual amount of extra latency.
+ val sessionKeyNames = cameraMetadata.sessionKeys.map { it.name }
+
+ // Iterate template parameters and CHECK BY NAME, as there have been cases where equality
+ // checks did not pass.
+ for ((key, value) in config.sessionParameters) {
+ if (key !is CaptureRequest.Key<*>) continue
+ if (sessionKeyNames.contains(key.name)) {
+ requestBuilder.writeParameter(key, value)
+ }
+ }
+ Api28Compat.setSessionParameters(sessionConfig, requestBuilder.build())
+ Api28Compat.createCaptureSession(cameraDevice, sessionConfig)
+ } != null
+
+ override fun createCaptureRequest(template: RequestTemplate): CaptureRequest.Builder? =
+ catchAndReportCameraExceptions(cameraId, cameraErrorListener) {
cameraDevice.createCaptureRequest(template.value)
}
@RequiresApi(23)
override fun createReprocessCaptureRequest(
inputResult: TotalCaptureResult
- ): CaptureRequest.Builder = rethrowCamera2Exceptions {
+ ): CaptureRequest.Builder? = catchAndReportCameraExceptions(cameraId, cameraErrorListener) {
Api23Compat.createReprocessCaptureRequest(cameraDevice, inputResult)
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt
index 23fbb4a..254be23 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt
@@ -97,11 +97,10 @@
surfaces: Map<StreamId, Surface>,
captureSessionState: CaptureSessionState
): Map<StreamId, OutputConfigurationWrapper> {
- try {
- cameraDevice.createCaptureSession(
+ if (!cameraDevice.createCaptureSession(
surfaces.map { it.value }, captureSessionState, threads.camera2Handler
)
- } catch (e: Throwable) {
+ ) {
Log.warn {
"Failed to create capture session from $cameraDevice for $captureSessionState!"
}
@@ -122,9 +121,8 @@
captureSessionState: CaptureSessionState
): Map<StreamId, OutputConfigurationWrapper> {
if (graphConfig.input != null) {
- try {
- val outputConfig = graphConfig.input.stream.outputs.single()
- cameraDevice.createReprocessableCaptureSession(
+ val outputConfig = graphConfig.input.stream.outputs.single()
+ if (!cameraDevice.createReprocessableCaptureSession(
InputConfiguration(
outputConfig.size.width,
outputConfig.size.height,
@@ -134,7 +132,7 @@
captureSessionState,
threads.camera2Handler
)
- } catch (e: Throwable) {
+ ) {
Log.warn {
"Failed to create reprocessable captures session from $cameraDevice for" +
" $captureSessionState!"
@@ -142,11 +140,10 @@
captureSessionState.disconnect()
}
} else {
- try {
- cameraDevice.createCaptureSession(
+ if (!cameraDevice.createCaptureSession(
surfaces.map { it.value }, captureSessionState, threads.camera2Handler
)
- } catch (e: Throwable) {
+ ) {
Log.warn {
"Failed to create captures session from $cameraDevice for $captureSessionState!"
}
@@ -165,11 +162,10 @@
surfaces: Map<StreamId, Surface>,
captureSessionState: CaptureSessionState
): Map<StreamId, OutputConfigurationWrapper> {
- try {
- cameraDevice.createConstrainedHighSpeedCaptureSession(
+ if (!cameraDevice.createConstrainedHighSpeedCaptureSession(
surfaces.map { it.value }, captureSessionState, threads.camera2Handler
)
- } catch (e: Throwable) {
+ ) {
Log.warn {
"Failed to create ConstrainedHighSpeedCaptureSession " +
"from $cameraDevice for $captureSessionState!"
@@ -206,25 +202,24 @@
return emptyMap()
}
- try {
- if (graphConfig.input == null) {
- cameraDevice.createCaptureSessionByOutputConfigurations(
- outputs.all, captureSessionState, threads.camera2Handler
- )
- } else {
- val outputConfig = graphConfig.input.stream.outputs.single()
- cameraDevice.createReprocessableCaptureSessionByConfigurations(
- InputConfigData(
- outputConfig.size.width,
- outputConfig.size.height,
- outputConfig.format.value
- ),
- outputs.all,
- captureSessionState,
- threads.camera2Handler
- )
- }
- } catch (e: Throwable) {
+ val result = if (graphConfig.input == null) {
+ cameraDevice.createCaptureSessionByOutputConfigurations(
+ outputs.all, captureSessionState, threads.camera2Handler
+ )
+ } else {
+ val outputConfig = graphConfig.input.stream.outputs.single()
+ cameraDevice.createReprocessableCaptureSessionByConfigurations(
+ InputConfigData(
+ outputConfig.size.width,
+ outputConfig.size.height,
+ outputConfig.format.value
+ ),
+ outputs.all,
+ captureSessionState,
+ threads.camera2Handler
+ )
+ }
+ if (!result) {
Log.warn {
"Failed to create capture session from $cameraDevice for $captureSessionState!"
}
@@ -286,9 +281,7 @@
graphConfig.sessionParameters
)
- try {
- cameraDevice.createCaptureSession(sessionConfig)
- } catch (e: Throwable) {
+ if (!cameraDevice.createCaptureSession(sessionConfig)) {
Log.warn {
"Failed to create capture session from $cameraDevice for $captureSessionState!"
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionWrapper.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionWrapper.kt
index 2698852..1b2637b 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionWrapper.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionWrapper.kt
@@ -18,8 +18,6 @@
package androidx.camera.camera2.pipe.compat
-import android.hardware.camera2.CameraAccessException
-import android.hardware.camera2.CameraAccessException.CAMERA_ERROR
import android.hardware.camera2.CameraCaptureSession
import android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession
import android.hardware.camera2.CaptureRequest
@@ -31,6 +29,7 @@
import androidx.annotation.RequiresApi
import androidx.camera.camera2.pipe.UnsafeWrapper
import androidx.camera.camera2.pipe.core.Log
+import androidx.camera.camera2.pipe.internal.CameraErrorListener
import kotlin.reflect.KClass
import kotlinx.atomicfu.atomic
@@ -62,8 +61,7 @@
val inputSurface: Surface?
/** @see [CameraCaptureSession.abortCaptures]. */
- @Throws(ObjectUnavailableException::class)
- fun abortCaptures()
+ fun abortCaptures(): Boolean
/**
* @param request The settings for this exposure
@@ -73,12 +71,11 @@
* @return An unique capture sequence id.
* @see [CameraCaptureSession.capture].
*/
- @Throws(ObjectUnavailableException::class)
fun capture(
request: CaptureRequest,
listener: CameraCaptureSession.CaptureCallback,
handler: Handler?
- ): Int
+ ): Int?
/**
* @param requests A list of CaptureRequest(s) for this sequence of exposures
@@ -89,12 +86,11 @@
* @return An unique capture sequence id.
* @see [CameraCaptureSession.captureBurst].
*/
- @Throws(ObjectUnavailableException::class)
fun captureBurst(
requests: List<CaptureRequest>,
listener: CameraCaptureSession.CaptureCallback,
handler: Handler?
- ): Int
+ ): Int?
/**
* @param requests A list of settings to cycle through indefinitely.
@@ -105,12 +101,11 @@
* @return An unique capture sequence ID.
* @see [CameraCaptureSession.setRepeatingBurst]
*/
- @Throws(ObjectUnavailableException::class)
fun setRepeatingBurst(
requests: List<CaptureRequest>,
listener: CameraCaptureSession.CaptureCallback,
handler: Handler?
- ): Int
+ ): Int?
/**
* @param request The request to repeat indefinitely.
@@ -120,20 +115,17 @@
* @return An unique capture sequence ID.
* @see [CameraCaptureSession.setRepeatingRequest].
*/
- @Throws(ObjectUnavailableException::class)
fun setRepeatingRequest(
request: CaptureRequest,
listener: CameraCaptureSession.CaptureCallback,
handler: Handler?
- ): Int
+ ): Int?
/** @see [CameraCaptureSession.stopRepeating]. */
- @Throws(ObjectUnavailableException::class)
- fun stopRepeating()
+ fun stopRepeating(): Boolean
/** Forwards to CameraCaptureSession#finalizeOutputConfigurations */
- @Throws(ObjectUnavailableException::class)
- fun finalizeOutputConfigurations(outputConfigs: List<OutputConfigurationWrapper>)
+ fun finalizeOutputConfigurations(outputConfigs: List<OutputConfigurationWrapper>): Boolean
/** @see CameraCaptureSession.StateCallback */
interface StateCallback {
@@ -183,13 +175,14 @@
private val device: CameraDeviceWrapper,
private val stateCallback: CameraCaptureSessionWrapper.StateCallback,
lastStateCallback: CameraCaptureSessionWrapper.StateCallback?,
+ private val cameraErrorListener: CameraErrorListener,
private val interopSessionStateCallback: CameraCaptureSession.StateCallback? = null
) : CameraCaptureSession.StateCallback() {
private val _lastStateCallback = atomic(lastStateCallback)
private val captureSession = atomic<CameraCaptureSessionWrapper?>(null)
override fun onConfigured(session: CameraCaptureSession) {
- stateCallback.onConfigured(getWrapped(session))
+ stateCallback.onConfigured(getWrapped(session, cameraErrorListener))
// b/249258992 - This is a workaround to ensure previous CameraCaptureSession.StateCallback
// instances receive some kind of "finalization" signal if onClosed is not fired by the
@@ -199,48 +192,54 @@
}
override fun onConfigureFailed(session: CameraCaptureSession) {
- stateCallback.onConfigureFailed(getWrapped(session))
+ stateCallback.onConfigureFailed(getWrapped(session, cameraErrorListener))
finalizeSession()
interopSessionStateCallback?.onConfigureFailed(session)
}
override fun onReady(session: CameraCaptureSession) {
- stateCallback.onReady(getWrapped(session))
+ stateCallback.onReady(getWrapped(session, cameraErrorListener))
interopSessionStateCallback?.onReady(session)
}
override fun onActive(session: CameraCaptureSession) {
- stateCallback.onActive(getWrapped(session))
+ stateCallback.onActive(getWrapped(session, cameraErrorListener))
interopSessionStateCallback?.onActive(session)
}
override fun onClosed(session: CameraCaptureSession) {
- stateCallback.onClosed(getWrapped(session))
+ stateCallback.onClosed(getWrapped(session, cameraErrorListener))
finalizeSession()
interopSessionStateCallback?.onClosed(session)
}
override fun onCaptureQueueEmpty(session: CameraCaptureSession) {
- stateCallback.onCaptureQueueEmpty(getWrapped(session))
+ stateCallback.onCaptureQueueEmpty(getWrapped(session, cameraErrorListener))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Api26CompatImpl.onCaptureQueueEmpty(session, interopSessionStateCallback)
}
}
- private fun getWrapped(session: CameraCaptureSession): CameraCaptureSessionWrapper {
+ private fun getWrapped(
+ session: CameraCaptureSession,
+ cameraErrorListener: CameraErrorListener,
+ ): CameraCaptureSessionWrapper {
var local = captureSession.value
if (local != null) {
return local
}
- local = wrapSession(session)
+ local = wrapSession(session, cameraErrorListener)
if (captureSession.compareAndSet(null, local)) {
return local
}
return captureSession.value!!
}
- private fun wrapSession(session: CameraCaptureSession): CameraCaptureSessionWrapper {
+ private fun wrapSession(
+ session: CameraCaptureSession,
+ cameraErrorListener: CameraErrorListener,
+ ): CameraCaptureSessionWrapper {
// Starting in Android P, it's possible for the standard "createCaptureSession" method to
// return a CameraConstrainedHighSpeedCaptureSession depending on the configuration. If
// this happens, several methods are not allowed, the behavior is different, and interacting
@@ -248,9 +247,9 @@
return if (Build.VERSION.SDK_INT >= 23 &&
session is CameraConstrainedHighSpeedCaptureSession
) {
- AndroidCameraConstrainedHighSpeedCaptureSession(device, session)
+ AndroidCameraConstrainedHighSpeedCaptureSession(device, session, cameraErrorListener)
} else {
- AndroidCameraCaptureSession(device, session)
+ AndroidCameraCaptureSession(device, session, cameraErrorListener)
}
}
@@ -281,53 +280,54 @@
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
internal open class AndroidCameraCaptureSession(
override val device: CameraDeviceWrapper,
- private val cameraCaptureSession: CameraCaptureSession
+ private val cameraCaptureSession: CameraCaptureSession,
+ private val cameraErrorListener: CameraErrorListener,
) : CameraCaptureSessionWrapper {
- override fun abortCaptures() {
- rethrowCamera2Exceptions { cameraCaptureSession.abortCaptures() }
- }
+ override fun abortCaptures(): Boolean =
+ catchAndReportCameraExceptions(device.cameraId, cameraErrorListener) {
+ cameraCaptureSession.abortCaptures()
+ } != null
override fun capture(
request: CaptureRequest,
listener: CameraCaptureSession.CaptureCallback,
handler: Handler?
- ): Int {
- return rethrowCamera2Exceptions { cameraCaptureSession.capture(request, listener, handler) }
+ ): Int? = catchAndReportCameraExceptions(device.cameraId, cameraErrorListener) {
+ cameraCaptureSession.capture(
+ request,
+ listener,
+ handler
+ )
}
override fun captureBurst(
requests: List<CaptureRequest>,
listener: CameraCaptureSession.CaptureCallback,
handler: Handler?
- ): Int {
- return rethrowCamera2Exceptions {
- cameraCaptureSession.captureBurst(requests, listener, handler)
- }
+ ): Int? = catchAndReportCameraExceptions(device.cameraId, cameraErrorListener) {
+ cameraCaptureSession.captureBurst(requests, listener, handler)
}
override fun setRepeatingBurst(
requests: List<CaptureRequest>,
listener: CameraCaptureSession.CaptureCallback,
handler: Handler?
- ): Int {
- return rethrowCamera2Exceptions {
- cameraCaptureSession.setRepeatingBurst(requests, listener, handler)
- }
+ ): Int? = catchAndReportCameraExceptions(device.cameraId, cameraErrorListener) {
+ cameraCaptureSession.setRepeatingBurst(requests, listener, handler)
}
override fun setRepeatingRequest(
request: CaptureRequest,
listener: CameraCaptureSession.CaptureCallback,
handler: Handler?
- ): Int {
- return rethrowCamera2Exceptions {
- cameraCaptureSession.setRepeatingRequest(request, listener, handler)
- }
+ ): Int? = catchAndReportCameraExceptions(device.cameraId, cameraErrorListener) {
+ cameraCaptureSession.setRepeatingRequest(request, listener, handler)
}
- override fun stopRepeating() {
- rethrowCamera2Exceptions { cameraCaptureSession.stopRepeating() }
- }
+ override fun stopRepeating(): Boolean =
+ catchAndReportCameraExceptions(device.cameraId, cameraErrorListener) {
+ cameraCaptureSession.stopRepeating()
+ } != null
override val isReprocessable: Boolean
get() {
@@ -349,30 +349,20 @@
}
@RequiresApi(26)
- override fun finalizeOutputConfigurations(outputConfigs: List<OutputConfigurationWrapper>) {
+ override fun finalizeOutputConfigurations(
+ outputConfigs: List<OutputConfigurationWrapper>
+ ): Boolean {
check(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
"Attempting to call finalizeOutputConfigurations before O is not supported and may " +
"lead to to unexpected behavior if an application is expects this call to " +
"succeed."
}
- var exceptionToThrow: Throwable? = null
- try {
+ return catchAndReportCameraExceptions(device.cameraId, cameraErrorListener) {
Api26Compat.finalizeOutputConfigurations(
cameraCaptureSession,
outputConfigs.map { it.unwrapAs(OutputConfiguration::class) })
- } catch (e: CameraAccessException) {
- // TODO(b/266734799): There is a possibility that we might finalize output
- // configurations on a camera that's been disconnected. In such cases, we'll receive
- // CameraAccessException.CAMERA_ERROR. Catch it for now, until we properly report and
- // handle capture session errors.
- if (e.reason != CAMERA_ERROR) {
- exceptionToThrow = e
- }
- } catch (e: Throwable) {
- exceptionToThrow = e
- }
- exceptionToThrow?.let { rethrowCamera2Exceptions { throw it } }
+ } != null
}
@Suppress("UNCHECKED_CAST")
@@ -395,8 +385,10 @@
internal class AndroidCameraConstrainedHighSpeedCaptureSession
internal constructor(
device: CameraDeviceWrapper,
- private val session: CameraConstrainedHighSpeedCaptureSession
-) : AndroidCameraCaptureSession(device, session), CameraConstrainedHighSpeedCaptureSessionWrapper {
+ private val session: CameraConstrainedHighSpeedCaptureSession,
+ private val cameraErrorListener: CameraErrorListener,
+) : AndroidCameraCaptureSession(device, session, cameraErrorListener),
+ CameraConstrainedHighSpeedCaptureSessionWrapper {
@Throws(ObjectUnavailableException::class)
override fun createHighSpeedRequestList(request: CaptureRequest): List<CaptureRequest> {
return try {
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Exceptions.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Exceptions.kt
index 85cdd1c..3cf8857 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Exceptions.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Exceptions.kt
@@ -20,7 +20,9 @@
import android.hardware.camera2.CameraAccessException
import androidx.annotation.RequiresApi
-import androidx.camera.camera2.pipe.core.Log
+import androidx.camera.camera2.pipe.CameraError
+import androidx.camera.camera2.pipe.CameraId
+import androidx.camera.camera2.pipe.internal.CameraErrorListener
/**
* Thrown when an operation cannot be executed because underlying object is closed or in an unusable
@@ -30,7 +32,11 @@
/** Catch specific exceptions that are not normally thrown, log them, then rethrow. */
@Throws(ObjectUnavailableException::class)
-internal inline fun <T> rethrowCamera2Exceptions(crossinline block: () -> T): T {
+internal inline fun <T> catchAndReportCameraExceptions(
+ cameraId: CameraId,
+ cameraErrorListener: CameraErrorListener,
+ crossinline block: () -> T
+): T? {
// Camera2 has, at different points in time, thrown a large number of checked and/or
// unchecked exceptions under different circumstances that are not listed in the
// documentation. This method catches and recasts these exceptions into a common exception
@@ -49,17 +55,22 @@
try {
return block()
} catch (e: Exception) {
- throw when (e) {
+ when (e) {
is IllegalArgumentException,
is IllegalStateException,
is CameraAccessException,
is SecurityException,
- is UnsupportedOperationException -> {
- Log.debug(e) { "Rethrowing ${e::class.java.simpleName} from Camera2" }
- ObjectUnavailableException(e)
+ is UnsupportedOperationException,
+ is NullPointerException -> {
+ cameraErrorListener.onCameraError(
+ cameraId,
+ CameraError.ERROR_GRAPH_CONFIG,
+ willAttemptRetry = false
+ )
+ return null
}
- else -> e
+ else -> throw e
}
}
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExternalRequestProcessor.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExternalRequestProcessor.kt
index 151d702..f8cfa64 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExternalRequestProcessor.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExternalRequestProcessor.kt
@@ -24,6 +24,7 @@
import androidx.camera.camera2.pipe.CameraController
import androidx.camera.camera2.pipe.CameraGraph
import androidx.camera.camera2.pipe.CameraId
+import androidx.camera.camera2.pipe.CameraStatusMonitor
import androidx.camera.camera2.pipe.CaptureSequence
import androidx.camera.camera2.pipe.CaptureSequenceProcessor
import androidx.camera.camera2.pipe.Metadata
@@ -65,7 +66,7 @@
}
}
- override fun tryRestart() {
+ override fun tryRestart(cameraStatus: CameraStatusMonitor.CameraStatus) {
// This is intentionally made a no-op for now as CameraPipe external doesn't support
// camera status monitoring and camera controller restart.
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpener.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpener.kt
index f4c438a..6f19a06 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpener.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpener.kt
@@ -25,7 +25,6 @@
import androidx.camera.camera2.pipe.CameraError
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraPipe
-import androidx.camera.camera2.pipe.GraphState.GraphStateError
import androidx.camera.camera2.pipe.core.Debug
import androidx.camera.camera2.pipe.core.DurationNs
import androidx.camera.camera2.pipe.core.Log
@@ -35,7 +34,7 @@
import androidx.camera.camera2.pipe.core.TimestampNs
import androidx.camera.camera2.pipe.core.Timestamps
import androidx.camera.camera2.pipe.core.Timestamps.formatMs
-import androidx.camera.camera2.pipe.graph.GraphListener
+import androidx.camera.camera2.pipe.internal.CameraErrorListener
import javax.inject.Inject
import javax.inject.Provider
import kotlin.coroutines.resume
@@ -151,6 +150,7 @@
constructor(
private val cameraOpener: CameraOpener,
private val camera2MetadataProvider: Camera2MetadataProvider,
+ private val cameraErrorListener: CameraErrorListener,
private val timeSource: TimeSource,
private val cameraInteropConfig: CameraPipe.CameraInteropConfig?
) {
@@ -167,6 +167,7 @@
attempts,
requestTimestamp,
timeSource,
+ cameraErrorListener,
cameraInteropConfig?.cameraDeviceStateCallback,
cameraInteropConfig?.cameraSessionStateCallback
)
@@ -206,13 +207,13 @@
@Inject
constructor(
private val cameraStateOpener: CameraStateOpener,
+ private val cameraErrorListener: CameraErrorListener,
private val cameraAvailabilityMonitor: CameraAvailabilityMonitor,
private val timeSource: TimeSource,
private val devicePolicyManager: DevicePolicyManagerWrapper
) {
internal suspend fun openCameraWithRetry(
cameraId: CameraId,
- graphListener: GraphListener
): OpenCameraResult {
val requestTimestamp = Timestamps.now(timeSource)
var attempts = 0
@@ -220,7 +221,12 @@
while (true) {
attempts++
- val result = cameraStateOpener.tryOpenCamera(cameraId, attempts, requestTimestamp)
+ val result =
+ cameraStateOpener.tryOpenCamera(
+ cameraId,
+ attempts,
+ requestTimestamp,
+ )
with(result) {
if (cameraState != null) {
return result
@@ -250,7 +256,7 @@
// 1 open call to happen silently without generating an error, and notify about each
// error after that point.
if (!willRetry || attempts > 1) {
- graphListener.onGraphError(GraphStateError(errorCode, willRetry))
+ cameraErrorListener.onCameraError(cameraId, errorCode, willRetry)
}
if (!willRetry) {
Log.error {
@@ -327,6 +333,15 @@
CameraError.ERROR_CAMERA_DISCONNECTED -> true
CameraError.ERROR_ILLEGAL_ARGUMENT_EXCEPTION -> true
CameraError.ERROR_SECURITY_EXCEPTION -> attempts <= 1
+ CameraError.ERROR_DO_NOT_DISTURB_ENABLED ->
+ // The error indicates that a RuntimeException was encountered when opening the
+ // camera while Do Not Disturb mode is on. This can happen on legacy devices on
+ // API level 28 [1]. Retries will always fail and should not be attempted.
+ //
+ // [1] b/149413835 - Crash during CameraX initialization when Do Not Disturb
+ // is on.
+ false
+
else -> {
Log.error { "Unexpected CameraError: $this" }
false
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCamera.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCamera.kt
index b5e7a6d..04cfadb 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCamera.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCamera.kt
@@ -35,6 +35,8 @@
import androidx.camera.camera2.pipe.core.Timestamps
import androidx.camera.camera2.pipe.core.Timestamps.formatMs
import androidx.camera.camera2.pipe.core.Token
+import androidx.camera.camera2.pipe.graph.GraphListener
+import androidx.camera.camera2.pipe.internal.CameraErrorListener
import kotlin.coroutines.EmptyCoroutineContext
import kotlinx.atomicfu.atomic
import kotlinx.coroutines.Job
@@ -113,7 +115,10 @@
internal val virtualCameraDebugIds = atomic(0)
-internal class VirtualCameraState(val cameraId: CameraId) : VirtualCamera {
+internal class VirtualCameraState(
+ val cameraId: CameraId,
+ val graphListener: GraphListener
+) : VirtualCamera {
private val debugId = virtualCameraDebugIds.incrementAndGet()
private val lock = Any()
@@ -208,6 +213,7 @@
private val attemptNumber: Int,
private val attemptTimestampNanos: TimestampNs,
private val timeSource: TimeSource,
+ private val cameraErrorListener: CameraErrorListener,
private val interopDeviceStateCallback: CameraDevice.StateCallback? = null,
private val interopSessionStateCallback: CameraCaptureSession.StateCallback? = null
) : CameraDevice.StateCallback() {
@@ -293,7 +299,13 @@
// while if it synchronously calls createCaptureSession.
_state.value =
CameraStateOpen(
- AndroidCameraDevice(metadata, cameraDevice, cameraId, interopSessionStateCallback)
+ AndroidCameraDevice(
+ metadata,
+ cameraDevice,
+ cameraId,
+ cameraErrorListener,
+ interopSessionStateCallback
+ )
)
// Check to see if we received close() or other events in the meantime.
@@ -393,7 +405,17 @@
null
}
if (closeInfo != null) {
+ // If the camera error is an Exception during open, the error should be reported by
+ // RetryingCameraStateOpener.
+ if (closeInfo.errorCode != null && closeInfo.reason != ClosedReason.CAMERA2_EXCEPTION) {
+ cameraErrorListener.onCameraError(
+ cameraId,
+ closeInfo.errorCode,
+ willAttemptRetry = false
+ )
+ }
_state.value = CameraStateClosing(closeInfo.errorCode)
+
cameraDeviceWrapper.closeWithTrace()
cameraDevice.closeWithTrace()
_state.value = computeClosedState(closeInfo)
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCameraManager.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCameraManager.kt
index fe27798..06e4e27 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCameraManager.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCameraManager.kt
@@ -60,6 +60,7 @@
constructor(
private val permissions: Permissions,
private val retryingCameraStateOpener: RetryingCameraStateOpener,
+ private val camera2ErrorProcessor: Camera2ErrorProcessor,
private val threads: Threads
) {
// TODO: Consider rewriting this as a MutableSharedFlow
@@ -75,7 +76,7 @@
share: Boolean = false,
graphListener: GraphListener
): VirtualCamera {
- val result = VirtualCameraState(cameraId)
+ val result = VirtualCameraState(cameraId, graphListener)
offerChecked(RequestOpen(result, share, graphListener))
return result
}
@@ -178,10 +179,11 @@
}
// Stage 3: Open or select an active camera device.
+ camera2ErrorProcessor.setActiveVirtualCamera(cameraIdToOpen, request.virtualCamera)
var realCamera = activeCameras.firstOrNull { it.cameraId == cameraIdToOpen }
if (realCamera == null) {
val openResult =
- openCameraWithRetry(cameraIdToOpen, request.graphListener, scope = this)
+ openCameraWithRetry(cameraIdToOpen, scope = this)
if (openResult.activeCamera != null) {
realCamera = openResult.activeCamera
activeCameras.add(realCamera)
@@ -200,7 +202,6 @@
private suspend fun openCameraWithRetry(
cameraId: CameraId,
- graphListener: GraphListener,
scope: CoroutineScope
): OpenVirtualCameraResult {
// TODO: Figure out how 1-time permissions work, and see if they can be reset without
@@ -208,14 +209,15 @@
check(permissions.hasCameraPermission) { "Missing camera permissions!" }
Log.debug { "Opening $cameraId with retries..." }
- val result = retryingCameraStateOpener.openCameraWithRetry(cameraId, graphListener)
+ val result = retryingCameraStateOpener.openCameraWithRetry(cameraId)
if (result.cameraState == null) {
return OpenVirtualCameraResult(lastCameraError = result.errorCode)
}
return OpenVirtualCameraResult(
activeCamera =
ActiveCamera(
- androidCameraState = result.cameraState, scope = scope, channel = requestQueue
+ androidCameraState = result.cameraState,
+ scope = scope, channel = requestQueue
)
)
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/Camera2Component.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/Camera2Component.kt
index 57d38e5..710b044 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/Camera2Component.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/Camera2Component.kt
@@ -29,6 +29,7 @@
import androidx.camera.camera2.pipe.compat.Camera2CameraStatusMonitor
import androidx.camera.camera2.pipe.compat.Camera2CaptureSequenceProcessorFactory
import androidx.camera.camera2.pipe.compat.Camera2CaptureSessionsModule
+import androidx.camera.camera2.pipe.compat.Camera2ErrorProcessor
import androidx.camera.camera2.pipe.compat.Camera2MetadataCache
import androidx.camera.camera2.pipe.compat.Camera2MetadataProvider
import androidx.camera.camera2.pipe.compat.CameraAvailabilityMonitor
@@ -37,6 +38,7 @@
import androidx.camera.camera2.pipe.core.Threads
import androidx.camera.camera2.pipe.graph.GraphListener
import androidx.camera.camera2.pipe.graph.StreamGraphImpl
+import androidx.camera.camera2.pipe.internal.CameraErrorListener
import dagger.Binds
import dagger.Module
import dagger.Provides
@@ -61,6 +63,11 @@
): Camera2MetadataProvider
@Binds
+ abstract fun bindCameraErrorListener(
+ camera2ErrorProcessor: Camera2ErrorProcessor
+ ): CameraErrorListener
+
+ @Binds
abstract fun bindCameraAvailabilityMonitor(
camera2CameraAvailabilityMonitor: Camera2CameraAvailabilityMonitor
): CameraAvailabilityMonitor
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/GraphProcessor.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/GraphProcessor.kt
index 053e5cb..355643f 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/GraphProcessor.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/GraphProcessor.kt
@@ -179,6 +179,7 @@
}
override fun onGraphModified(requestProcessor: GraphRequestProcessor) {
+ debug { "$this onGraphModified" }
synchronized(lock) {
if (closed) {
return
@@ -191,6 +192,7 @@
}
override fun onGraphError(graphStateError: GraphStateError) {
+ debug { "$this onGraphError($graphStateError)" }
_graphState.update { graphState ->
if (graphState is GraphStateStopping || graphState is GraphStateStopped) {
GraphStateStopped
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/GraphRequestProcessor.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/GraphRequestProcessor.kt
index bde6051..81d3845 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/GraphRequestProcessor.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/GraphRequestProcessor.kt
@@ -179,7 +179,7 @@
Log.warn { "Did not submit $captureSequence, $this was closed!" }
return false
}
- val sequenceNumber = captureSequenceProcessor.submit(captureSequence)
+ val sequenceNumber = captureSequenceProcessor.submit(captureSequence) ?: -1
captureSequence.sequenceNumber = sequenceNumber
sequenceNumber
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/internal/CameraErrorListener.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/internal/CameraErrorListener.kt
new file mode 100644
index 0000000..19b6018
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/internal/CameraErrorListener.kt
@@ -0,0 +1,32 @@
+/*
+ * 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.camera2.pipe.internal
+
+import androidx.camera.camera2.pipe.CameraError
+import androidx.camera.camera2.pipe.CameraId
+
+/**
+ * Interface intended to be used to report camera errors. It will ensure only the current
+ * [androidx.camera.camera2.pipe.graph.GraphListener] is notified of the error.
+ */
+interface CameraErrorListener {
+ fun onCameraError(
+ cameraId: CameraId,
+ cameraError: CameraError,
+ willAttemptRetry: Boolean = false
+ )
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/internal/GraphLifecycleManager.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/internal/GraphLifecycleManager.kt
index 1429f76..ee876bf 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/internal/GraphLifecycleManager.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/internal/GraphLifecycleManager.kt
@@ -87,10 +87,14 @@
cameraBackend.cameraStatus.collect { cameraStatus ->
when (cameraStatus) {
is CameraStatus.CameraPrioritiesChanged ->
- tryRestartCameraController(cameraBackend)
+ tryRestartCameraController(cameraBackend, cameraStatus)
is CameraStatus.CameraAvailable ->
- tryRestartCameraController(cameraBackend, cameraStatus.cameraId)
+ tryRestartCameraController(
+ cameraBackend,
+ cameraStatus,
+ cameraStatus.cameraId
+ )
}
}
}
@@ -111,6 +115,7 @@
private fun tryRestartCameraController(
cameraBackend: CameraBackend,
+ cameraStatus: CameraStatus,
cameraId: CameraId? = null,
) = synchronized(lock) {
// Restart the last CameraController being tracked in each backend. The last
@@ -122,6 +127,6 @@
} else {
true
}
- }?.tryRestart()
+ }?.tryRestart(cameraStatus)
}
}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/AndroidCaptureSessionStateCallbackTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/AndroidCaptureSessionStateCallbackTest.kt
index 4e1e57f..6b0573a 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/AndroidCaptureSessionStateCallbackTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/AndroidCaptureSessionStateCallbackTest.kt
@@ -18,6 +18,7 @@
import android.hardware.camera2.CameraCaptureSession
import android.os.Build
+import androidx.camera.camera2.pipe.internal.CameraErrorListener
import androidx.camera.camera2.pipe.testing.RobolectricCameraPipeTestRunner
import org.junit.Test
import org.junit.runner.RunWith
@@ -35,11 +36,13 @@
private val stateCallback: CameraCaptureSessionWrapper.StateCallback = mock()
private val previousStateCallback: CameraCaptureSessionWrapper.StateCallback = mock()
private val captureSession: CameraCaptureSession = mock()
+ private val cameraErrorListener: CameraErrorListener = mock()
private val androidStateCallback =
AndroidCaptureSessionStateCallback(
device = camera,
stateCallback = stateCallback,
lastStateCallback = previousStateCallback,
+ cameraErrorListener = cameraErrorListener,
)
@Test
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessorTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessorTest.kt
index a5b2acf..93349db 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessorTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessorTest.kt
@@ -202,6 +202,7 @@
val result = captureSequenceProcessor.submit(sequence!!)
+ assertThat(result).isNotNull()
assertThat(result).isGreaterThan(0)
assertThat(fakeCaptureSessionWrapper.lastCapture).hasSize(1)
assertThat(fakeCaptureSessionWrapper.lastRepeating).isNull()
@@ -231,6 +232,7 @@
assertThat(captureSequence).isNotNull()
val result = captureSequenceProcessor.submit(captureSequence!!)
+ assertThat(result).isNotNull()
assertThat(result).isGreaterThan(0)
}
@@ -320,6 +322,7 @@
val result = captureSequenceProcessor.submit(sequence!!)
+ assertThat(result).isNotNull()
assertThat(result).isGreaterThan(0)
assertThat(fakeCaptureSessionWrapper.lastCapture).hasSize(1)
assertThat(fakeCaptureSessionWrapper.lastRepeating).isNull()
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactoryTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactoryTest.kt
index c2bcc17..475d2fb 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactoryTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactoryTest.kt
@@ -39,6 +39,7 @@
import androidx.camera.camera2.pipe.config.ThreadConfigModule
import androidx.camera.camera2.pipe.core.SystemTimeSource
import androidx.camera.camera2.pipe.graph.StreamGraphImpl
+import androidx.camera.camera2.pipe.internal.CameraErrorListener
import androidx.camera.camera2.pipe.testing.FakeCaptureSequence
import androidx.camera.camera2.pipe.testing.FakeCaptureSequenceProcessor
import androidx.camera.camera2.pipe.testing.FakeGraphProcessor
@@ -55,6 +56,7 @@
import org.junit.After
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.mock
import org.robolectric.Shadows
import org.robolectric.annotation.Config
@@ -66,6 +68,7 @@
private val mainLooper = Shadows.shadowOf(Looper.getMainLooper())
private val cameraId = RobolectricCameras.create()
private val testCamera = RobolectricCameras.open(cameraId)
+ private val cameraErrorListener: CameraErrorListener = mock()
@After
fun teardown() {
@@ -106,7 +109,10 @@
val pendingOutputs =
sessionFactory.create(
AndroidCameraDevice(
- testCamera.metadata, testCamera.cameraDevice, testCamera.cameraId
+ testCamera.metadata,
+ testCamera.cameraDevice,
+ testCamera.cameraId,
+ cameraErrorListener
),
mapOf(stream1.id to surface),
captureSessionState =
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpenerTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpenerTest.kt
index 06d89fc..6e1716c 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpenerTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpenerTest.kt
@@ -24,16 +24,15 @@
import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_CAMERA_DISCONNECTED
import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_CAMERA_IN_USE
import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_CAMERA_LIMIT_EXCEEDED
+import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_DO_NOT_DISTURB_ENABLED
import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_ILLEGAL_ARGUMENT_EXCEPTION
import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_SECURITY_EXCEPTION
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraMetadata
-import androidx.camera.camera2.pipe.GraphState.GraphStateError
import androidx.camera.camera2.pipe.core.DurationNs
import androidx.camera.camera2.pipe.core.TimestampNs
import androidx.camera.camera2.pipe.core.Timestamps
-import androidx.camera.camera2.pipe.graph.GraphListener
-import androidx.camera.camera2.pipe.graph.GraphRequestProcessor
+import androidx.camera.camera2.pipe.internal.CameraErrorListener
import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
import androidx.camera.camera2.pipe.testing.FakeTimeSource
import androidx.camera.camera2.pipe.testing.RobolectricCameraPipeTestRunner
@@ -78,8 +77,28 @@
private val fakeTimeSource = FakeTimeSource()
+ // TODO(lnishan): Consider mocking this object when Mockito works well with value classes.
+ private val fakeCameraErrorListener =
+ object : CameraErrorListener {
+ var numberOfErrorCalls = 0
+
+ override fun onCameraError(
+ cameraId: CameraId,
+ cameraError: CameraError,
+ willAttemptRetry: Boolean
+ ) {
+ numberOfErrorCalls++
+ }
+ }
+
private val cameraStateOpener =
- CameraStateOpener(cameraOpener, camera2MetadataProvider, fakeTimeSource, null)
+ CameraStateOpener(
+ cameraOpener,
+ camera2MetadataProvider,
+ fakeCameraErrorListener,
+ fakeTimeSource,
+ cameraInteropConfig = null,
+ )
private val cameraAvailabilityMonitor =
object : CameraAvailabilityMonitor {
@@ -97,25 +116,13 @@
private val retryingCameraStateOpener =
RetryingCameraStateOpener(
- cameraStateOpener, cameraAvailabilityMonitor, fakeTimeSource, fakeDevicePolicyManager
+ cameraStateOpener,
+ fakeCameraErrorListener,
+ cameraAvailabilityMonitor,
+ fakeTimeSource,
+ fakeDevicePolicyManager,
)
- // TODO(lnishan): Consider mocking this object when Mockito works well with value classes.
- private val fakeGraphListener =
- object : GraphListener {
- var numberOfErrorCalls = 0
-
- override fun onGraphStarted(requestProcessor: GraphRequestProcessor) {}
-
- override fun onGraphStopped(requestProcessor: GraphRequestProcessor) {}
-
- override fun onGraphModified(requestProcessor: GraphRequestProcessor) {}
-
- override fun onGraphError(graphStateError: GraphStateError) {
- numberOfErrorCalls++
- }
- }
-
@Test
fun testShouldRetryReturnsTrueWithinTimeout() {
val firstAttemptTimestamp = TimestampNs(0L)
@@ -123,7 +130,7 @@
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_CAMERA_IN_USE,
+ ERROR_CAMERA_IN_USE,
1,
firstAttemptTimestamp,
fakeTimeSource,
@@ -140,7 +147,7 @@
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_CAMERA_IN_USE,
+ ERROR_CAMERA_IN_USE,
1,
firstAttemptTimestamp,
fakeTimeSource,
@@ -174,7 +181,7 @@
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_CAMERA_IN_USE,
+ ERROR_CAMERA_IN_USE,
1,
firstAttemptTimestamp,
fakeTimeSource,
@@ -186,7 +193,7 @@
// The second retry attempt should fail if SDK version < S, and succeed otherwise.
val secondRetry =
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_CAMERA_IN_USE, 2, firstAttemptTimestamp, fakeTimeSource, false
+ ERROR_CAMERA_IN_USE, 2, firstAttemptTimestamp, fakeTimeSource, false
)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
assertThat(secondRetry).isFalse()
@@ -202,7 +209,7 @@
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_CAMERA_LIMIT_EXCEEDED,
+ ERROR_CAMERA_LIMIT_EXCEEDED,
1,
firstAttemptTimestamp,
fakeTimeSource,
@@ -214,7 +221,7 @@
// Second attempt should succeed as well.
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_CAMERA_LIMIT_EXCEEDED,
+ ERROR_CAMERA_LIMIT_EXCEEDED,
2,
firstAttemptTimestamp,
fakeTimeSource,
@@ -231,7 +238,7 @@
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_CAMERA_DISABLED,
+ ERROR_CAMERA_DISABLED,
1,
firstAttemptTimestamp,
fakeTimeSource,
@@ -243,7 +250,7 @@
// Second attempt should fail if camera is disabled.
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_CAMERA_DISABLED,
+ ERROR_CAMERA_DISABLED,
2,
firstAttemptTimestamp,
fakeTimeSource,
@@ -260,7 +267,7 @@
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_CAMERA_DISABLED,
+ ERROR_CAMERA_DISABLED,
1,
firstAttemptTimestamp,
fakeTimeSource,
@@ -272,7 +279,7 @@
// Second attempt should success if camera is not disabled.
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_CAMERA_DISABLED,
+ ERROR_CAMERA_DISABLED,
2,
firstAttemptTimestamp,
fakeTimeSource,
@@ -347,7 +354,7 @@
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_CAMERA_DISCONNECTED,
+ ERROR_CAMERA_DISCONNECTED,
1,
firstAttemptTimestamp,
fakeTimeSource,
@@ -359,7 +366,7 @@
// Second attempt should succeed as well.
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_CAMERA_DISCONNECTED,
+ ERROR_CAMERA_DISCONNECTED,
2,
firstAttemptTimestamp,
fakeTimeSource,
@@ -376,7 +383,7 @@
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_ILLEGAL_ARGUMENT_EXCEPTION,
+ ERROR_ILLEGAL_ARGUMENT_EXCEPTION,
1,
firstAttemptTimestamp,
fakeTimeSource,
@@ -388,7 +395,7 @@
// Second attempt should succeed as well.
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_ILLEGAL_ARGUMENT_EXCEPTION,
+ ERROR_ILLEGAL_ARGUMENT_EXCEPTION,
2,
firstAttemptTimestamp,
fakeTimeSource,
@@ -405,7 +412,7 @@
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_SECURITY_EXCEPTION,
+ ERROR_SECURITY_EXCEPTION,
1,
firstAttemptTimestamp,
fakeTimeSource,
@@ -417,7 +424,7 @@
// Second attempt should fail.
assertThat(
RetryingCameraStateOpener.shouldRetry(
- CameraError.ERROR_SECURITY_EXCEPTION,
+ ERROR_SECURITY_EXCEPTION,
2,
firstAttemptTimestamp,
fakeTimeSource,
@@ -428,19 +435,72 @@
}
@Test
+ fun testShouldNotRetryDoNotDisturbModeEnabled() {
+ val firstAttemptTimestamp = TimestampNs(0L)
+ fakeTimeSource.currentTimestamp = TimestampNs(1_000_000_000L) // 1 second
+
+ assertThat(
+ RetryingCameraStateOpener.shouldRetry(
+ ERROR_DO_NOT_DISTURB_ENABLED,
+ 1,
+ firstAttemptTimestamp,
+ fakeTimeSource,
+ false
+ )
+ )
+ .isFalse()
+ }
+
+ @Test
fun cameraStateOpenerReturnsCorrectError() = runTest {
cameraOpener.toThrow = CameraAccessException(CameraAccessException.CAMERA_IN_USE)
- val result = cameraStateOpener.tryOpenCamera(cameraId0, 1, Timestamps.now(fakeTimeSource))
+ val result = cameraStateOpener.tryOpenCamera(
+ cameraId0,
+ 1,
+ Timestamps.now(fakeTimeSource),
+ )
assertThat(result.errorCode).isEqualTo(ERROR_CAMERA_IN_USE)
}
@Test
+ fun cameraStateOpenerReturnsCorrectErrorWhenDoNotDisturbModeEnabledOnApi28() = runTest {
+ val throwable = RuntimeException("Camera is being used after Camera.release() was called")
+ throwable.stackTrace = arrayOf(
+ StackTraceElement(
+ "android.hardware.Camera",
+ "_enableShutterSound",
+ "Native Method",
+ 0
+ ),
+ StackTraceElement(
+ "android.hardware.Camera",
+ "updateAppOpsPlayAudio",
+ "Camera.java",
+ 1770
+ )
+ )
+ cameraOpener.toThrow = throwable
+
+ try {
+ val result = cameraStateOpener.tryOpenCamera(
+ cameraId0,
+ 1,
+ Timestamps.now(fakeTimeSource),
+ )
+ assertThat(result.errorCode).isEqualTo(ERROR_DO_NOT_DISTURB_ENABLED)
+ } catch (throwable: Throwable) {
+ // Only non-28 SDK levels should throw an exception.
+ assertThat(Build.VERSION.SDK_INT).isNotEqualTo(28)
+ }
+ }
+
+ @Test
fun retryingCameraStateOpenerRetriesCorrectlyOnCameraInUse() = runTest {
whenever(fakeDevicePolicyManager.camerasDisabled).thenReturn(false)
cameraOpener.toThrow = CameraAccessException(CameraAccessException.CAMERA_IN_USE)
val result = async {
- retryingCameraStateOpener.openCameraWithRetry(cameraId0, fakeGraphListener)
+ retryingCameraStateOpener.openCameraWithRetry(cameraId0)
}
// Advance virtual clock to move past the retry timeout.
@@ -457,7 +517,9 @@
}
// The first retry should be hidden. Therefore the number of onGraphError() calls should be
// exactly the number of camera opens minus 1.
- assertThat(fakeGraphListener.numberOfErrorCalls).isEqualTo(cameraOpener.numberOfOpens - 1)
+ assertThat(fakeCameraErrorListener.numberOfErrorCalls).isEqualTo(
+ cameraOpener.numberOfOpens - 1
+ )
}
@Test
@@ -465,7 +527,7 @@
whenever(fakeDevicePolicyManager.camerasDisabled).thenReturn(false)
cameraOpener.toThrow = CameraAccessException(CameraAccessException.MAX_CAMERAS_IN_USE)
val result = async {
- retryingCameraStateOpener.openCameraWithRetry(cameraId0, fakeGraphListener)
+ retryingCameraStateOpener.openCameraWithRetry(cameraId0)
}
// Advance virtual clock to move past the retry timeout.
@@ -478,7 +540,9 @@
assertThat(cameraOpener.numberOfOpens).isGreaterThan(2)
// The first retry should be hidden. Therefore the number of onGraphError() calls should be
// exactly the number of camera opens minus 1.
- assertThat(fakeGraphListener.numberOfErrorCalls).isEqualTo(cameraOpener.numberOfOpens - 1)
+ assertThat(fakeCameraErrorListener.numberOfErrorCalls).isEqualTo(
+ cameraOpener.numberOfOpens - 1
+ )
}
@Test
@@ -486,7 +550,7 @@
whenever(fakeDevicePolicyManager.camerasDisabled).thenReturn(true)
cameraOpener.toThrow = CameraAccessException(CameraAccessException.CAMERA_DISABLED)
val result = async {
- retryingCameraStateOpener.openCameraWithRetry(cameraId0, fakeGraphListener)
+ retryingCameraStateOpener.openCameraWithRetry(cameraId0)
}
// Advance virtual clock with just enough time for 1 camera retry (we wait 500ms before the
@@ -500,7 +564,7 @@
assertThat(cameraOpener.numberOfOpens).isEqualTo(2)
// The first retry should be hidden. Therefore the number of onGraphError() calls should be
// exactly 1.
- assertThat(fakeGraphListener.numberOfErrorCalls).isEqualTo(1)
+ assertThat(fakeCameraErrorListener.numberOfErrorCalls).isEqualTo(1)
}
@Test
@@ -508,7 +572,7 @@
whenever(fakeDevicePolicyManager.camerasDisabled).thenReturn(false)
cameraOpener.toThrow = CameraAccessException(CameraAccessException.CAMERA_DISABLED)
val result = async {
- retryingCameraStateOpener.openCameraWithRetry(cameraId0, fakeGraphListener)
+ retryingCameraStateOpener.openCameraWithRetry(cameraId0)
}
// Advance virtual clock to move past the retry timeout.
@@ -521,7 +585,9 @@
assertThat(cameraOpener.numberOfOpens).isGreaterThan(2)
// The first retry should be hidden. Therefore the number of onGraphError() calls should be
// exactly the number of camera opens minus 1.
- assertThat(fakeGraphListener.numberOfErrorCalls).isEqualTo(cameraOpener.numberOfOpens - 1)
+ assertThat(fakeCameraErrorListener.numberOfErrorCalls).isEqualTo(
+ cameraOpener.numberOfOpens - 1
+ )
}
@Test
@@ -529,7 +595,7 @@
whenever(fakeDevicePolicyManager.camerasDisabled).thenReturn(false)
cameraOpener.toThrow = CameraAccessException(CameraAccessException.CAMERA_DISCONNECTED)
val result = async {
- retryingCameraStateOpener.openCameraWithRetry(cameraId0, fakeGraphListener)
+ retryingCameraStateOpener.openCameraWithRetry(cameraId0)
}
// Advance virtual clock to move past the retry timeout.
@@ -542,7 +608,9 @@
assertThat(cameraOpener.numberOfOpens).isGreaterThan(2)
// The first retry should be hidden. Therefore the number of onGraphError() calls should be
// exactly the number of camera opens minus 1.
- assertThat(fakeGraphListener.numberOfErrorCalls).isEqualTo(cameraOpener.numberOfOpens - 1)
+ assertThat(fakeCameraErrorListener.numberOfErrorCalls).isEqualTo(
+ cameraOpener.numberOfOpens - 1
+ )
}
@Test
@@ -550,7 +618,7 @@
whenever(fakeDevicePolicyManager.camerasDisabled).thenReturn(false)
cameraOpener.toThrow = IllegalArgumentException()
val result = async {
- retryingCameraStateOpener.openCameraWithRetry(cameraId0, fakeGraphListener)
+ retryingCameraStateOpener.openCameraWithRetry(cameraId0)
}
// Advance virtual clock to move past the retry timeout.
@@ -563,7 +631,9 @@
assertThat(cameraOpener.numberOfOpens).isGreaterThan(2)
// The first retry should be hidden. Therefore the number of onGraphError() calls should be
// exactly the number of camera opens minus 1.
- assertThat(fakeGraphListener.numberOfErrorCalls).isEqualTo(cameraOpener.numberOfOpens - 1)
+ assertThat(fakeCameraErrorListener.numberOfErrorCalls).isEqualTo(
+ cameraOpener.numberOfOpens - 1
+ )
}
@Test
@@ -571,7 +641,7 @@
whenever(fakeDevicePolicyManager.camerasDisabled).thenReturn(false)
cameraOpener.toThrow = SecurityException()
val result = async {
- retryingCameraStateOpener.openCameraWithRetry(cameraId0, fakeGraphListener)
+ retryingCameraStateOpener.openCameraWithRetry(cameraId0)
}
// Advance virtual clock with just enough time for 1 camera retry (we wait 500ms before the
@@ -585,6 +655,6 @@
assertThat(cameraOpener.numberOfOpens).isEqualTo(2)
// The first retry should be hidden. Therefore the number of onGraphError() calls should be
// exactly 1.
- assertThat(fakeGraphListener.numberOfErrorCalls).isEqualTo(1)
+ assertThat(fakeCameraErrorListener.numberOfErrorCalls).isEqualTo(1)
}
}
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/VirtualCameraTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/VirtualCameraTest.kt
index 01c6aac..75a220d 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/VirtualCameraTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/VirtualCameraTest.kt
@@ -20,10 +20,13 @@
import android.os.Build
import android.os.Looper.getMainLooper
import androidx.camera.camera2.pipe.CameraError
+import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.core.SystemTimeSource
import androidx.camera.camera2.pipe.core.TimeSource
import androidx.camera.camera2.pipe.core.Timestamps
import androidx.camera.camera2.pipe.core.Token
+import androidx.camera.camera2.pipe.graph.GraphListener
+import androidx.camera.camera2.pipe.internal.CameraErrorListener
import androidx.camera.camera2.pipe.testing.RobolectricCameraPipeTestRunner
import androidx.camera.camera2.pipe.testing.RobolectricCameras
import com.google.common.truth.Truth.assertThat
@@ -39,6 +42,7 @@
import org.junit.After
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.mock
import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config
@@ -49,6 +53,8 @@
private val mainLooper = shadowOf(getMainLooper())
private val cameraId = RobolectricCameras.create()
private val testCamera = RobolectricCameras.open(cameraId)
+ private val graphListener: GraphListener = mock()
+ private val cameraErrorListener: CameraErrorListener = mock()
@After
fun teardown() {
@@ -60,7 +66,7 @@
fun virtualCameraStateCanBeDisconnected() = runTest {
// This test asserts that the virtual camera starts in an unopened state and is changed to
// "Closed" when disconnect is invoked on the VirtualCamera.
- val virtualCamera = VirtualCameraState(cameraId)
+ val virtualCamera = VirtualCameraState(cameraId, graphListener)
assertThat(virtualCamera.value).isInstanceOf(CameraStateUnopened::class.java)
virtualCamera.disconnect()
@@ -84,12 +90,15 @@
// This test asserts that when a virtual camera is connected to a flow of CameraState
// changes that it receives those changes and can be subsequently disconnected, which stops
// additional events from being passed to the virtual camera instance.
- val virtualCamera = VirtualCameraState(cameraId)
+ val virtualCamera = VirtualCameraState(cameraId, graphListener)
val cameraState =
flowOf(
CameraStateOpen(
AndroidCameraDevice(
- testCamera.metadata, testCamera.cameraDevice, testCamera.cameraId
+ testCamera.metadata,
+ testCamera.cameraDevice,
+ testCamera.cameraId,
+ cameraErrorListener,
)
)
)
@@ -116,12 +125,15 @@
fun virtualCameraStateRespondsToClose() = runTest {
// This tests that a listener attached to the virtualCamera.state property will receive all
// of the events, starting from CameraStateUnopened.
- val virtualCamera = VirtualCameraState(cameraId)
+ val virtualCamera = VirtualCameraState(cameraId, graphListener)
val states =
listOf(
CameraStateOpen(
AndroidCameraDevice(
- testCamera.metadata, testCamera.cameraDevice, testCamera.cameraId
+ testCamera.metadata,
+ testCamera.cameraDevice,
+ testCamera.cameraId,
+ cameraErrorListener,
)
),
CameraStateClosing(),
@@ -159,6 +171,19 @@
private val testCamera = RobolectricCameras.open(cameraId)
private val timeSource: TimeSource = SystemTimeSource()
private val now = Timestamps.now(timeSource)
+ private val cameraErrorListener = object : CameraErrorListener {
+ var lastCameraId: CameraId? = null
+ var lastCameraError: CameraError? = null
+
+ override fun onCameraError(
+ cameraId: CameraId,
+ cameraError: CameraError,
+ willAttemptRetry: Boolean
+ ) {
+ lastCameraId = cameraId
+ lastCameraError = cameraError
+ }
+ }
@After
fun teardown() {
@@ -174,7 +199,8 @@
testCamera.metadata,
attemptNumber = 1,
attemptTimestampNanos = now,
- timeSource
+ timeSource,
+ cameraErrorListener
)
assertThat(listener.state.value).isInstanceOf(CameraStateUnopened.javaClass)
@@ -219,7 +245,8 @@
testCamera.metadata,
attemptNumber = 1,
attemptTimestampNanos = now,
- timeSource
+ timeSource,
+ cameraErrorListener
)
listener.onDisconnected(testCamera.cameraDevice)
@@ -240,7 +267,8 @@
testCamera.metadata,
attemptNumber = 1,
attemptTimestampNanos = now,
- timeSource
+ timeSource,
+ cameraErrorListener
)
listener.close()
@@ -258,7 +286,8 @@
testCamera.metadata,
attemptNumber = 1,
attemptTimestampNanos = now,
- timeSource
+ timeSource,
+ cameraErrorListener
)
listener.closeWith(IllegalArgumentException("Test Exception"))
@@ -276,7 +305,8 @@
testCamera.metadata,
attemptNumber = 1,
attemptTimestampNanos = now,
- timeSource
+ timeSource,
+ cameraErrorListener
)
listener.onError(testCamera.cameraDevice, CameraDevice.StateCallback.ERROR_CAMERA_SERVICE)
@@ -287,4 +317,44 @@
assertThat(closedState.cameraErrorCode).isEqualTo(CameraError.ERROR_CAMERA_SERVICE)
assertThat(closedState.cameraException).isNull()
}
+
+ @Test
+ fun errorCodesAreReportedToGraphListener() {
+ val listener =
+ AndroidCameraState(
+ testCamera.cameraId,
+ testCamera.metadata,
+ attemptNumber = 1,
+ attemptTimestampNanos = now,
+ timeSource,
+ cameraErrorListener
+ )
+
+ listener.onOpened(testCamera.cameraDevice)
+ listener.onError(testCamera.cameraDevice, CameraDevice.StateCallback.ERROR_CAMERA_SERVICE)
+ mainLooper.idle()
+ assertThat(cameraErrorListener.lastCameraId).isEqualTo(testCamera.cameraId)
+ assertThat(cameraErrorListener.lastCameraError).isEqualTo(CameraError.ERROR_CAMERA_SERVICE)
+ }
+
+ @Test
+ fun errorCodesAreReportedToGraphListenerWhenCameraIsNotOpened() {
+ // Unless this is a camera open exception, all errors should be reported even if camera is
+ // not opened. The main reason is CameraAccessException.CAMERA_ERROR, where under which, we
+ // only know the nature of the error true onError(), and we should and would report that.
+ val listener =
+ AndroidCameraState(
+ testCamera.cameraId,
+ testCamera.metadata,
+ attemptNumber = 1,
+ attemptTimestampNanos = now,
+ timeSource,
+ cameraErrorListener
+ )
+
+ listener.onError(testCamera.cameraDevice, CameraDevice.StateCallback.ERROR_CAMERA_SERVICE)
+ mainLooper.idle()
+ assertThat(cameraErrorListener.lastCameraId).isEqualTo(testCamera.cameraId)
+ assertThat(cameraErrorListener.lastCameraError).isEqualTo(CameraError.ERROR_CAMERA_SERVICE)
+ }
}
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraController.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraController.kt
index c49f98a..c8a6aa8 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraController.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraController.kt
@@ -19,6 +19,7 @@
import android.view.Surface
import androidx.camera.camera2.pipe.CameraController
import androidx.camera.camera2.pipe.CameraId
+import androidx.camera.camera2.pipe.CameraStatusMonitor
import androidx.camera.camera2.pipe.StreamId
internal class FakeCameraController : CameraController {
@@ -36,7 +37,7 @@
started = false
}
- override fun tryRestart() {
+ override fun tryRestart(cameraStatus: CameraStatusMonitor.CameraStatus) {
stop()
start()
}
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraDeviceWrapper.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraDeviceWrapper.kt
index 33c7946..76333bd 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraDeviceWrapper.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraDeviceWrapper.kt
@@ -61,12 +61,14 @@
outputs: List<Surface>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- ) {
+ ): Boolean {
createFakeCaptureSession(stateCallback)
+ return true
}
- override fun createCaptureSession(config: SessionConfigData) {
+ override fun createCaptureSession(config: SessionConfigData): Boolean {
createFakeCaptureSession(config.stateCallback)
+ return true
}
override fun createReprocessableCaptureSession(
@@ -74,24 +76,27 @@
outputs: List<Surface>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- ) {
+ ): Boolean {
createFakeCaptureSession(stateCallback)
+ return true
}
override fun createConstrainedHighSpeedCaptureSession(
outputs: List<Surface>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- ) {
+ ): Boolean {
createFakeCaptureSession(stateCallback)
+ return true
}
override fun createCaptureSessionByOutputConfigurations(
outputConfigurations: List<OutputConfigurationWrapper>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- ) {
+ ): Boolean {
createFakeCaptureSession(stateCallback)
+ return true
}
override fun createReprocessableCaptureSessionByConfigurations(
@@ -99,8 +104,9 @@
outputs: List<OutputConfigurationWrapper>,
stateCallback: CameraCaptureSessionWrapper.StateCallback,
handler: Handler?
- ) {
+ ): Boolean {
createFakeCaptureSession(stateCallback)
+ return true
}
override fun onDeviceClosed() {
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCaptureSessionWrapper.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCaptureSessionWrapper.kt
index 9688607e..bc4d75d 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCaptureSessionWrapper.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCaptureSessionWrapper.kt
@@ -43,8 +43,9 @@
val unwrappedClasses = arrayListOf<Any>()
- override fun abortCaptures() {
+ override fun abortCaptures(): Boolean {
abortCapturesInvoked = true
+ return true
}
override fun capture(
@@ -95,11 +96,14 @@
return lastSequenceNumber
}
- override fun stopRepeating() {
+ override fun stopRepeating(): Boolean {
stopRepeatingInvoked = true
+ return true
}
- override fun finalizeOutputConfigurations(outputConfigs: List<OutputConfigurationWrapper>) {
+ override fun finalizeOutputConfigurations(
+ outputConfigs: List<OutputConfigurationWrapper>
+ ): Boolean {
throw UnsupportedOperationException("finalizeOutputConfigurations is not supported")
}
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2DeviceSurfaceManager.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2DeviceSurfaceManager.java
index b4c5083..a85be9d 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2DeviceSurfaceManager.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2DeviceSurfaceManager.java
@@ -30,6 +30,7 @@
import androidx.camera.core.CameraUnavailableException;
import androidx.camera.core.impl.AttachedSurfaceInfo;
import androidx.camera.core.impl.CameraDeviceSurfaceManager;
+import androidx.camera.core.impl.CameraMode;
import androidx.camera.core.impl.StreamSpec;
import androidx.camera.core.impl.SurfaceConfig;
import androidx.camera.core.impl.UseCaseConfig;
@@ -113,39 +114,9 @@
}
/**
- * Check whether the input surface configuration list is under the capability of any combination
- * of this object.
- *
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
- * @param cameraId the camera id of the camera device to be compared
- * @param surfaceConfigList the surface configuration list to be compared
- * @return the check result that whether it could be supported
- * @throws IllegalStateException if not initialized
- */
- @Override
- public boolean checkSupported(
- boolean isConcurrentCameraModeOn,
- @NonNull String cameraId, @Nullable List<SurfaceConfig> surfaceConfigList) {
- if (surfaceConfigList == null || surfaceConfigList.isEmpty()) {
- return true;
- }
-
- SupportedSurfaceCombination supportedSurfaceCombination =
- mCameraSupportedSurfaceCombinationMap.get(cameraId);
-
- boolean isSupported = false;
- if (supportedSurfaceCombination != null) {
- isSupported = supportedSurfaceCombination.checkSupported(isConcurrentCameraModeOn,
- surfaceConfigList);
- }
-
- return isSupported;
- }
-
- /**
* Transform to a SurfaceConfig object with cameraId, image format and size info
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
+ * @param cameraMode the working camera mode.
* @param cameraId the camera id of the camera device to transform the object
* @param imageFormat the image format info for the surface configuration object
* @param size the size info for the surface configuration object
@@ -155,7 +126,7 @@
@Nullable
@Override
public SurfaceConfig transformSurfaceConfig(
- boolean isConcurrentCameraModeOn,
+ @CameraMode.Mode int cameraMode,
@NonNull String cameraId,
int imageFormat,
@NonNull Size size) {
@@ -166,7 +137,7 @@
if (supportedSurfaceCombination != null) {
surfaceConfig =
supportedSurfaceCombination.transformSurfaceConfig(
- isConcurrentCameraModeOn,
+ cameraMode,
imageFormat,
size);
}
@@ -177,8 +148,7 @@
/**
* Retrieves a map of suggested stream specifications for the given list of use cases.
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise
- * false.
+ * @param cameraMode the working camera mode.
* @param cameraId the camera id of the camera device used by the
* use cases
* @param existingSurfaces list of surfaces already configured and used by
@@ -197,7 +167,7 @@
@NonNull
@Override
public Map<UseCaseConfig<?>, StreamSpec> getSuggestedStreamSpecs(
- boolean isConcurrentCameraModeOn, @NonNull String cameraId,
+ @CameraMode.Mode int cameraMode, @NonNull String cameraId,
@NonNull List<AttachedSurfaceInfo> existingSurfaces,
@NonNull Map<UseCaseConfig<?>, List<Size>> newUseCaseConfigsSupportedSizeMap) {
Preconditions.checkArgument(!newUseCaseConfigsSupportedSizeMap.isEmpty(),
@@ -212,7 +182,7 @@
}
return supportedSurfaceCombination.getSuggestedStreamSpecifications(
- isConcurrentCameraModeOn,
+ cameraMode,
existingSurfaces,
newUseCaseConfigsSupportedSizeMap);
}
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/GuaranteedConfigurationsUtil.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/GuaranteedConfigurationsUtil.java
index 8932669..c4dd892 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/GuaranteedConfigurationsUtil.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/GuaranteedConfigurationsUtil.java
@@ -401,6 +401,143 @@
}
/**
+ * Returns the at least supported stream combinations for the ultra high resolution pixel
+ * sensor mode.
+ */
+ @NonNull
+ public static List<SurfaceCombination> getUltraHighResolutionSupportedCombinationList() {
+ List<SurfaceCombination> combinationList = new ArrayList<>();
+
+ // (YUV, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (PRIV, RECORD)
+ // Covers (YUV, ULTRA_MAXIMUM) + (PRIV, PREVIEW) in the guaranteed table.
+ SurfaceCombination surfaceCombination1 = new SurfaceCombination();
+ surfaceCombination1.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.ULTRA_MAXIMUM));
+ surfaceCombination1.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW));
+ surfaceCombination1.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.RECORD));
+ combinationList.add(surfaceCombination1);
+
+ // (JPEG, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (PRIV, RECORD)
+ // Covers (JPEG, ULTRA_MAXIMUM) + (PRIV, PREVIEW) in the guaranteed table.
+ SurfaceCombination surfaceCombination2 = new SurfaceCombination();
+ surfaceCombination2.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.ULTRA_MAXIMUM));
+ surfaceCombination2.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW));
+ surfaceCombination2.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.RECORD));
+ combinationList.add(surfaceCombination2);
+
+ // (RAW, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (PRIV, RECORD)
+ // Covers (RAW, ULTRA_MAXIMUM) + (PRIV, PREVIEW) in the guaranteed table.
+ SurfaceCombination surfaceCombination3 = new SurfaceCombination();
+ surfaceCombination3.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.ULTRA_MAXIMUM));
+ surfaceCombination3.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW));
+ surfaceCombination3.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.RECORD));
+ combinationList.add(surfaceCombination3);
+
+ // (YUV, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (JPEG, MAXIMUM)
+ SurfaceCombination surfaceCombination4 = new SurfaceCombination();
+ surfaceCombination4.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.ULTRA_MAXIMUM));
+ surfaceCombination4.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW));
+ surfaceCombination4.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.MAXIMUM));
+ combinationList.add(surfaceCombination4);
+
+ // (JPEG, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (JPEG, MAXIMUM)
+ SurfaceCombination surfaceCombination5 = new SurfaceCombination();
+ surfaceCombination5.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.ULTRA_MAXIMUM));
+ surfaceCombination5.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW));
+ surfaceCombination5.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.MAXIMUM));
+ combinationList.add(surfaceCombination5);
+
+ // (RAW, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (JPEG, MAXIMUM)
+ SurfaceCombination surfaceCombination6 = new SurfaceCombination();
+ surfaceCombination6.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.ULTRA_MAXIMUM));
+ surfaceCombination6.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW));
+ surfaceCombination6.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.MAXIMUM));
+ combinationList.add(surfaceCombination6);
+
+ // (YUV, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (YUV, MAXIMUM)
+ // Covers (YUV, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (YUV, RECORD) in the guaranteed table.
+ SurfaceCombination surfaceCombination7 = new SurfaceCombination();
+ surfaceCombination7.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.ULTRA_MAXIMUM));
+ surfaceCombination7.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW));
+ surfaceCombination7.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.MAXIMUM));
+ combinationList.add(surfaceCombination7);
+
+ // (JPEG, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (YUV, MAXIMUM)
+ // Covers (JPEG, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (YUV, RECORD) in the guaranteed table.
+ SurfaceCombination surfaceCombination8 = new SurfaceCombination();
+ surfaceCombination8.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.ULTRA_MAXIMUM));
+ surfaceCombination8.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW));
+ surfaceCombination8.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.MAXIMUM));
+ combinationList.add(surfaceCombination8);
+
+ // (RAW, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (YUV, MAXIMUM)
+ // Covers (RAW, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (YUV, RECORD) in the guaranteed table.
+ SurfaceCombination surfaceCombination9 = new SurfaceCombination();
+ surfaceCombination9.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.ULTRA_MAXIMUM));
+ surfaceCombination9.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW));
+ surfaceCombination9.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.MAXIMUM));
+ combinationList.add(surfaceCombination9);
+
+ // (YUV, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (RAW, MAXIMUM)
+ SurfaceCombination surfaceCombination10 = new SurfaceCombination();
+ surfaceCombination10.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.YUV, ConfigSize.ULTRA_MAXIMUM));
+ surfaceCombination10.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW));
+ surfaceCombination10.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.MAXIMUM));
+ combinationList.add(surfaceCombination10);
+
+ // (JPEG, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (RAW, MAXIMUM)
+ SurfaceCombination surfaceCombination11 = new SurfaceCombination();
+ surfaceCombination11.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.JPEG, ConfigSize.ULTRA_MAXIMUM));
+ surfaceCombination11.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW));
+ surfaceCombination11.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.MAXIMUM));
+ combinationList.add(surfaceCombination11);
+
+ // (RAW, ULTRA_MAXIMUM) + (PRIV, PREVIEW) + (RAW, MAXIMUM)
+ SurfaceCombination surfaceCombination12 = new SurfaceCombination();
+ surfaceCombination12.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.ULTRA_MAXIMUM));
+ surfaceCombination12.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW));
+ surfaceCombination12.addSurfaceConfig(
+ SurfaceConfig.create(ConfigType.RAW, ConfigSize.MAXIMUM));
+ combinationList.add(surfaceCombination12);
+
+ return combinationList;
+ }
+
+ /**
* Returns the at least supported stream combinations for concurrent cameras.
*/
@NonNull
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/SupportedSurfaceCombination.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/SupportedSurfaceCombination.java
index d59ff7f..dcec315 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/SupportedSurfaceCombination.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/SupportedSurfaceCombination.java
@@ -47,6 +47,7 @@
import androidx.camera.camera2.internal.compat.workaround.ResolutionCorrector;
import androidx.camera.core.CameraUnavailableException;
import androidx.camera.core.impl.AttachedSurfaceInfo;
+import androidx.camera.core.impl.CameraMode;
import androidx.camera.core.impl.ImageFormatConstants;
import androidx.camera.core.impl.StreamSpec;
import androidx.camera.core.impl.SurfaceCombination;
@@ -77,7 +78,11 @@
final class SupportedSurfaceCombination {
private static final String TAG = "SupportedSurfaceCombination";
private final List<SurfaceCombination> mSurfaceCombinations = new ArrayList<>();
+ private final List<SurfaceCombination> mUltraHighSurfaceCombinations = new ArrayList<>();
private final List<SurfaceCombination> mConcurrentSurfaceCombinations = new ArrayList<>();
+
+ private Map<Integer, List<SurfaceCombination>> mCameraModeToSupportedCombinationsMap =
+ new HashMap<>();
private final String mCameraId;
private final CamcorderProfileHelper mCamcorderProfileHelper;
private final CameraCharacteristicsCompat mCharacteristics;
@@ -137,6 +142,10 @@
generateSupportedCombinationList();
+ if (mIsUltraHighResolutionSensorSupported) {
+ generateUltraHighSupportedCombinationList();
+ }
+
mIsConcurrentCameraModeSupported =
context.getPackageManager().hasSystemFeature(FEATURE_CAMERA_CONCURRENT);
if (mIsConcurrentCameraModeSupported) {
@@ -171,18 +180,17 @@
* Check whether the input surface configuration list is under the capability of any combination
* of this object.
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
+ * @param cameraMode the working camera mode.
* @param surfaceConfigList the surface configuration list to be compared
* @return the check result that whether it could be supported
*/
boolean checkSupported(
- boolean isConcurrentCameraModeOn,
+ @CameraMode.Mode int cameraMode,
List<SurfaceConfig> surfaceConfigList) {
boolean isSupported = false;
- List<SurfaceCombination> targetSurfaceCombinations = isConcurrentCameraModeOn
- ? mConcurrentSurfaceCombinations : mSurfaceCombinations;
- for (SurfaceCombination surfaceCombination : targetSurfaceCombinations) {
+ for (SurfaceCombination surfaceCombination : getSurfaceCombinationsByCameraMode(
+ cameraMode)) {
isSupported = surfaceCombination.isSupported(surfaceConfigList);
if (isSupported) {
@@ -194,19 +202,48 @@
}
/**
+ * Returns the supported surface combinations according to the specified camera mode.
+ */
+ private List<SurfaceCombination> getSurfaceCombinationsByCameraMode(
+ @CameraMode.Mode int cameraMode) {
+ if (mCameraModeToSupportedCombinationsMap.containsKey(cameraMode)) {
+ return mCameraModeToSupportedCombinationsMap.get(cameraMode);
+ }
+
+ List<SurfaceCombination> supportedSurfaceCombinations = new ArrayList<>();
+
+ switch (cameraMode) {
+ case CameraMode.CONCURRENT_CAMERA:
+ supportedSurfaceCombinations = mConcurrentSurfaceCombinations;
+ break;
+ case CameraMode.ULTRA_HIGH_RESOLUTION_CAMERA:
+ supportedSurfaceCombinations.addAll(mUltraHighSurfaceCombinations);
+ supportedSurfaceCombinations.addAll(mSurfaceCombinations);
+ break;
+ default:
+ supportedSurfaceCombinations.addAll(mSurfaceCombinations);
+ break;
+ }
+
+ mCameraModeToSupportedCombinationsMap.put(cameraMode, supportedSurfaceCombinations);
+
+ return supportedSurfaceCombinations;
+ }
+
+ /**
* Transform to a SurfaceConfig object with image format and size info
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
+ * @param cameraMode the working camera mode.
* @param imageFormat the image format info for the surface configuration object
* @param size the size info for the surface configuration object
* @return new {@link SurfaceConfig} object
*/
SurfaceConfig transformSurfaceConfig(
- boolean isConcurrentCameraModeOn,
+ @CameraMode.Mode int cameraMode,
int imageFormat,
Size size) {
return SurfaceConfig.transformSurfaceConfig(
- isConcurrentCameraModeOn,
+ cameraMode,
imageFormat,
size,
mSurfaceSizeDefinition);
@@ -427,8 +464,7 @@
/**
* Finds the suggested stream specifications of the newly added UseCaseConfig.
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise
- * false.
+ * @param cameraMode the working camera mode.
* @param attachedSurfaces the existing surfaces.
* @param newUseCaseConfigsSupportedSizeMap newly added UseCaseConfig to supported output
* sizes map.
@@ -440,7 +476,7 @@
*/
@NonNull
Map<UseCaseConfig<?>, StreamSpec> getSuggestedStreamSpecifications(
- boolean isConcurrentCameraModeOn,
+ @CameraMode.Mode int cameraMode,
@NonNull List<AttachedSurfaceInfo> attachedSurfaces,
@NonNull Map<UseCaseConfig<?>, List<Size>> newUseCaseConfigsSupportedSizeMap) {
// Refresh Preview Size based on current display configurations.
@@ -457,13 +493,13 @@
for (UseCaseConfig<?> useCaseConfig : newUseCaseConfigs) {
surfaceConfigs.add(
SurfaceConfig.transformSurfaceConfig(
- isConcurrentCameraModeOn,
+ cameraMode,
useCaseConfig.getInputFormat(),
new Size(640, 480),
mSurfaceSizeDefinition));
}
- if (!checkSupported(isConcurrentCameraModeOn, surfaceConfigs)) {
+ if (!checkSupported(cameraMode, surfaceConfigs)) {
throw new IllegalArgumentException(
"No supported surface combination is found for camera device - Id : "
+ mCameraId + ". May be attempting to bind too many use cases. "
@@ -535,7 +571,7 @@
// add new use case/size config to list of surfaces
surfaceConfigList.add(
SurfaceConfig.transformSurfaceConfig(
- isConcurrentCameraModeOn,
+ cameraMode,
newUseCase.getInputFormat(),
size,
mSurfaceSizeDefinition));
@@ -559,7 +595,7 @@
}
// only change the saved config if you get another that has a better max fps
- if (checkSupported(isConcurrentCameraModeOn, surfaceConfigList)) {
+ if (checkSupported(cameraMode, surfaceConfigList)) {
// if the config is supported by the device but doesn't meet the target framerate,
// save the config
if (savedConfigMaxFps == Integer.MAX_VALUE) {
@@ -750,6 +786,11 @@
mExtraSupportedSurfaceCombinationsContainer.get(mCameraId, mHardwareLevel));
}
+ private void generateUltraHighSupportedCombinationList() {
+ mUltraHighSurfaceCombinations.addAll(
+ GuaranteedConfigurationsUtil.getUltraHighResolutionSupportedCombinationList());
+ }
+
private void generateConcurrentSupportedCombinationList() {
mConcurrentSurfaceCombinations.addAll(
GuaranteedConfigurationsUtil.getConcurrentSupportedCombinationList());
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/Camera2DeviceSurfaceManagerTest.java b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/Camera2DeviceSurfaceManagerTest.java
index b871f2b..5d49349 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/Camera2DeviceSurfaceManagerTest.java
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/Camera2DeviceSurfaceManagerTest.java
@@ -17,8 +17,6 @@
package androidx.camera.camera2.internal;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -43,8 +41,8 @@
import androidx.camera.core.CameraXConfig;
import androidx.camera.core.InitializationException;
import androidx.camera.core.impl.CameraDeviceSurfaceManager;
+import androidx.camera.core.impl.CameraMode;
import androidx.camera.core.impl.ImageFormatConstants;
-import androidx.camera.core.impl.SurfaceCombination;
import androidx.camera.core.impl.SurfaceConfig;
import androidx.camera.core.impl.SurfaceConfig.ConfigSize;
import androidx.camera.core.impl.SurfaceConfig.ConfigType;
@@ -69,7 +67,6 @@
import org.robolectric.shadows.ShadowCameraCharacteristics;
import org.robolectric.shadows.ShadowCameraManager;
-import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -160,210 +157,9 @@
}
@Test
- public void checkLegacySurfaceCombinationSupportedInLegacyDevice()
- throws Exception {
- SupportedSurfaceCombination supportedSurfaceCombination =
- new SupportedSurfaceCombination(
- mContext, LEGACY_CAMERA_ID, getCameraManagerCompat(),
- mMockCamcorderProfileHelper);
-
- List<SurfaceCombination> combinationList =
- GuaranteedConfigurationsUtil.getLegacySupportedCombinationList();
-
- for (SurfaceCombination combination : combinationList) {
- boolean isSupported =
- mSurfaceManager.checkSupported(
- /* isConcurrentCameraModeOn = */false,
- LEGACY_CAMERA_ID,
- combination.getSurfaceConfigList());
- assertTrue(isSupported);
- }
- }
-
- @Test
- public void checkLimitedSurfaceCombinationNotSupportedInLegacyDevice()
- throws Exception {
- SupportedSurfaceCombination supportedSurfaceCombination =
- new SupportedSurfaceCombination(
- mContext, LEGACY_CAMERA_ID, getCameraManagerCompat(),
- mMockCamcorderProfileHelper);
-
- List<SurfaceCombination> combinationList =
- GuaranteedConfigurationsUtil.getLimitedSupportedCombinationList();
-
- for (SurfaceCombination combination : combinationList) {
- boolean isSupported =
- mSurfaceManager.checkSupported(
- /* isConcurrentCameraModeOn = */false,
- LEGACY_CAMERA_ID, combination.getSurfaceConfigList());
- assertFalse(isSupported);
- }
- }
-
- @Test
- public void checkFullSurfaceCombinationNotSupportedInLegacyDevice()
- throws Exception {
- SupportedSurfaceCombination supportedSurfaceCombination =
- new SupportedSurfaceCombination(
- mContext, LEGACY_CAMERA_ID, getCameraManagerCompat(),
- mMockCamcorderProfileHelper);
-
- List<SurfaceCombination> combinationList =
- GuaranteedConfigurationsUtil.getFullSupportedCombinationList();
-
- for (SurfaceCombination combination : combinationList) {
- boolean isSupported =
- mSurfaceManager.checkSupported(
- /* isConcurrentCameraModeOn = */false,
- LEGACY_CAMERA_ID, combination.getSurfaceConfigList());
- assertFalse(isSupported);
- }
- }
-
- @Test
- public void checkLevel3SurfaceCombinationNotSupportedInLegacyDevice()
- throws Exception {
- SupportedSurfaceCombination supportedSurfaceCombination =
- new SupportedSurfaceCombination(
- mContext, LEGACY_CAMERA_ID, getCameraManagerCompat(),
- mMockCamcorderProfileHelper);
-
- List<SurfaceCombination> combinationList =
- GuaranteedConfigurationsUtil.getLevel3SupportedCombinationList();
-
- for (SurfaceCombination combination : combinationList) {
- boolean isSupported =
- mSurfaceManager.checkSupported(
- /* isConcurrentCameraModeOn = */false,
- LEGACY_CAMERA_ID, combination.getSurfaceConfigList());
- assertFalse(isSupported);
- }
- }
-
- @Test
- public void checkLimitedSurfaceCombinationSupportedInLimitedDevice()
- throws Exception {
- SupportedSurfaceCombination supportedSurfaceCombination =
- new SupportedSurfaceCombination(
- mContext, LIMITED_CAMERA_ID, getCameraManagerCompat(),
- mMockCamcorderProfileHelper);
-
- List<SurfaceCombination> combinationList =
- GuaranteedConfigurationsUtil.getLimitedSupportedCombinationList();
-
- for (SurfaceCombination combination : combinationList) {
- boolean isSupported =
- mSurfaceManager.checkSupported(
- /* isConcurrentCameraModeOn = */false,
- LIMITED_CAMERA_ID, combination.getSurfaceConfigList());
- assertTrue(isSupported);
- }
- }
-
- @Test
- public void checkFullSurfaceCombinationNotSupportedInLimitedDevice()
- throws Exception {
- SupportedSurfaceCombination supportedSurfaceCombination =
- new SupportedSurfaceCombination(
- mContext, LIMITED_CAMERA_ID, getCameraManagerCompat(),
- mMockCamcorderProfileHelper);
-
- List<SurfaceCombination> combinationList =
- GuaranteedConfigurationsUtil.getFullSupportedCombinationList();
-
- for (SurfaceCombination combination : combinationList) {
- boolean isSupported =
- mSurfaceManager.checkSupported(
- /* isConcurrentCameraModeOn = */false,
- LIMITED_CAMERA_ID, combination.getSurfaceConfigList());
- assertFalse(isSupported);
- }
- }
-
- @Test
- public void checkLevel3SurfaceCombinationNotSupportedInLimitedDevice()
- throws Exception {
- SupportedSurfaceCombination supportedSurfaceCombination =
- new SupportedSurfaceCombination(
- mContext, LIMITED_CAMERA_ID, getCameraManagerCompat(),
- mMockCamcorderProfileHelper);
-
- List<SurfaceCombination> combinationList =
- GuaranteedConfigurationsUtil.getLevel3SupportedCombinationList();
-
- for (SurfaceCombination combination : combinationList) {
- boolean isSupported =
- mSurfaceManager.checkSupported(
- /* isConcurrentCameraModeOn = */false,
- LIMITED_CAMERA_ID, combination.getSurfaceConfigList());
- assertFalse(isSupported);
- }
- }
-
- @Test
- public void checkFullSurfaceCombinationSupportedInFullDevice()
- throws Exception {
- SupportedSurfaceCombination supportedSurfaceCombination =
- new SupportedSurfaceCombination(
- mContext, FULL_CAMERA_ID, getCameraManagerCompat(),
- mMockCamcorderProfileHelper);
-
- List<SurfaceCombination> combinationList =
- GuaranteedConfigurationsUtil.getFullSupportedCombinationList();
-
- for (SurfaceCombination combination : combinationList) {
- boolean isSupported =
- mSurfaceManager.checkSupported(
- /* isConcurrentCameraModeOn = */false,
- FULL_CAMERA_ID, combination.getSurfaceConfigList());
- assertTrue(isSupported);
- }
- }
-
- @Test
- public void checkLevel3SurfaceCombinationNotSupportedInFullDevice()
- throws Exception {
- SupportedSurfaceCombination supportedSurfaceCombination =
- new SupportedSurfaceCombination(
- mContext, FULL_CAMERA_ID, getCameraManagerCompat(),
- mMockCamcorderProfileHelper);
-
- List<SurfaceCombination> combinationList =
- GuaranteedConfigurationsUtil.getLevel3SupportedCombinationList();
-
- for (SurfaceCombination combination : combinationList) {
- boolean isSupported =
- mSurfaceManager.checkSupported(
- /* isConcurrentCameraModeOn = */false,
- FULL_CAMERA_ID, combination.getSurfaceConfigList());
- assertFalse(isSupported);
- }
- }
-
- @Test
- public void checkLevel3SurfaceCombinationSupportedInLevel3Device()
- throws Exception {
- SupportedSurfaceCombination supportedSurfaceCombination =
- new SupportedSurfaceCombination(
- mContext, LEVEL3_CAMERA_ID, getCameraManagerCompat(),
- mMockCamcorderProfileHelper);
-
- List<SurfaceCombination> combinationList =
- GuaranteedConfigurationsUtil.getLevel3SupportedCombinationList();
-
- for (SurfaceCombination combination : combinationList) {
- boolean isSupported =
- mSurfaceManager.checkSupported(
- /* isConcurrentCameraModeOn = */false,
- LEVEL3_CAMERA_ID, combination.getSurfaceConfigList());
- assertTrue(isSupported);
- }
- }
-
- @Test
public void transformSurfaceConfigWithYUVAnalysisSize() {
SurfaceConfig surfaceConfig = mSurfaceManager.transformSurfaceConfig(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
LEGACY_CAMERA_ID, ImageFormat.YUV_420_888, mAnalysisSize);
SurfaceConfig expectedSurfaceConfig =
SurfaceConfig.create(ConfigType.YUV, ConfigSize.VGA);
@@ -373,7 +169,7 @@
@Test
public void transformSurfaceConfigWithYUVPreviewSize() {
SurfaceConfig surfaceConfig = mSurfaceManager.transformSurfaceConfig(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
LEGACY_CAMERA_ID, ImageFormat.YUV_420_888, mPreviewSize);
SurfaceConfig expectedSurfaceConfig =
SurfaceConfig.create(ConfigType.YUV, ConfigSize.PREVIEW);
@@ -383,7 +179,7 @@
@Test
public void transformSurfaceConfigWithYUVRecordSize() {
SurfaceConfig surfaceConfig = mSurfaceManager.transformSurfaceConfig(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
LEGACY_CAMERA_ID, ImageFormat.YUV_420_888, mRecordSize);
SurfaceConfig expectedSurfaceConfig =
SurfaceConfig.create(ConfigType.YUV, SurfaceConfig.ConfigSize.RECORD);
@@ -393,7 +189,7 @@
@Test
public void transformSurfaceConfigWithYUVMaximumSize() {
SurfaceConfig surfaceConfig = mSurfaceManager.transformSurfaceConfig(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
LEGACY_CAMERA_ID, ImageFormat.YUV_420_888, mMaximumSize);
SurfaceConfig expectedSurfaceConfig =
SurfaceConfig.create(SurfaceConfig.ConfigType.YUV, ConfigSize.MAXIMUM);
@@ -404,7 +200,7 @@
public void transformSurfaceConfigWithJPEGAnalysisSize() {
SurfaceConfig surfaceConfig =
mSurfaceManager.transformSurfaceConfig(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
LEGACY_CAMERA_ID, ImageFormat.JPEG, mAnalysisSize);
SurfaceConfig expectedSurfaceConfig =
SurfaceConfig.create(SurfaceConfig.ConfigType.JPEG, ConfigSize.VGA);
@@ -415,7 +211,7 @@
public void transformSurfaceConfigWithJPEGPreviewSize() {
SurfaceConfig surfaceConfig =
mSurfaceManager.transformSurfaceConfig(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
LEGACY_CAMERA_ID, ImageFormat.JPEG, mPreviewSize);
SurfaceConfig expectedSurfaceConfig =
SurfaceConfig.create(ConfigType.JPEG, ConfigSize.PREVIEW);
@@ -426,7 +222,7 @@
public void transformSurfaceConfigWithJPEGRecordSize() {
SurfaceConfig surfaceConfig =
mSurfaceManager.transformSurfaceConfig(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
LEGACY_CAMERA_ID, ImageFormat.JPEG, mRecordSize);
SurfaceConfig expectedSurfaceConfig =
SurfaceConfig.create(ConfigType.JPEG, ConfigSize.RECORD);
@@ -437,7 +233,7 @@
public void transformSurfaceConfigWithJPEGMaximumSize() {
SurfaceConfig surfaceConfig =
mSurfaceManager.transformSurfaceConfig(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
LEGACY_CAMERA_ID, ImageFormat.JPEG, mMaximumSize);
SurfaceConfig expectedSurfaceConfig =
SurfaceConfig.create(ConfigType.JPEG, ConfigSize.MAXIMUM);
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.kt b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.kt
index 472263f..d1fbc51 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.kt
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.kt
@@ -42,6 +42,7 @@
import androidx.camera.core.UseCase
import androidx.camera.core.impl.AttachedSurfaceInfo
import androidx.camera.core.impl.CameraDeviceSurfaceManager
+import androidx.camera.core.impl.CameraMode
import androidx.camera.core.impl.ImageFormatConstants.INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE
import androidx.camera.core.impl.StreamSpec
import androidx.camera.core.impl.SurfaceCombination
@@ -186,7 +187,7 @@
)
GuaranteedConfigurationsUtil.getLegacySupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isTrue()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isTrue()
}
}
@@ -197,7 +198,13 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
GuaranteedConfigurationsUtil.getLegacySupportedCombinationList().also {
- assertThat(isAllSubConfigListSupported(false, supportedSurfaceCombination, it)).isTrue()
+ assertThat(
+ isAllSubConfigListSupported(
+ CameraMode.DEFAULT,
+ supportedSurfaceCombination,
+ it
+ )
+ ).isTrue()
}
}
@@ -209,7 +216,7 @@
)
GuaranteedConfigurationsUtil.getLimitedSupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isFalse()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isFalse()
}
}
@@ -221,7 +228,7 @@
)
GuaranteedConfigurationsUtil.getFullSupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isFalse()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isFalse()
}
}
@@ -233,7 +240,7 @@
)
GuaranteedConfigurationsUtil.getLevel3SupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isFalse()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isFalse()
}
}
@@ -247,7 +254,7 @@
)
GuaranteedConfigurationsUtil.getLimitedSupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isTrue()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isTrue()
}
}
@@ -260,7 +267,13 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
GuaranteedConfigurationsUtil.getLimitedSupportedCombinationList().also {
- assertThat(isAllSubConfigListSupported(false, supportedSurfaceCombination, it)).isTrue()
+ assertThat(
+ isAllSubConfigListSupported(
+ CameraMode.DEFAULT,
+ supportedSurfaceCombination,
+ it
+ )
+ ).isTrue()
}
}
@@ -274,7 +287,7 @@
)
GuaranteedConfigurationsUtil.getFullSupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isFalse()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isFalse()
}
}
@@ -288,7 +301,7 @@
)
GuaranteedConfigurationsUtil.getLevel3SupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isFalse()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isFalse()
}
}
@@ -302,7 +315,7 @@
)
GuaranteedConfigurationsUtil.getFullSupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isTrue()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isTrue()
}
}
@@ -315,7 +328,13 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
GuaranteedConfigurationsUtil.getFullSupportedCombinationList().also {
- assertThat(isAllSubConfigListSupported(false, supportedSurfaceCombination, it)).isTrue()
+ assertThat(
+ isAllSubConfigListSupported(
+ CameraMode.DEFAULT,
+ supportedSurfaceCombination,
+ it
+ )
+ ).isTrue()
}
}
@@ -329,7 +348,7 @@
)
GuaranteedConfigurationsUtil.getLevel3SupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isFalse()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isFalse()
}
}
@@ -344,7 +363,7 @@
)
GuaranteedConfigurationsUtil.getLimitedSupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isTrue()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isTrue()
}
}
@@ -359,7 +378,7 @@
)
GuaranteedConfigurationsUtil.getLegacySupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isTrue()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isTrue()
}
}
@@ -374,7 +393,7 @@
)
GuaranteedConfigurationsUtil.getFullSupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isTrue()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isTrue()
}
}
@@ -389,7 +408,7 @@
)
GuaranteedConfigurationsUtil.getRAWSupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isTrue()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isTrue()
}
}
@@ -403,7 +422,7 @@
)
GuaranteedConfigurationsUtil.getLevel3SupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- false, it.surfaceConfigList)).isTrue()
+ CameraMode.DEFAULT, it.surfaceConfigList)).isTrue()
}
}
@@ -416,7 +435,13 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
GuaranteedConfigurationsUtil.getLevel3SupportedCombinationList().also {
- assertThat(isAllSubConfigListSupported(false, supportedSurfaceCombination, it)).isTrue()
+ assertThat(
+ isAllSubConfigListSupported(
+ CameraMode.DEFAULT,
+ supportedSurfaceCombination,
+ it
+ )
+ ).isTrue()
}
}
@@ -432,7 +457,7 @@
)
GuaranteedConfigurationsUtil.getConcurrentSupportedCombinationList().forEach {
assertThat(supportedSurfaceCombination.checkSupported(
- true, it.surfaceConfigList)).isTrue()
+ CameraMode.CONCURRENT_CAMERA, it.surfaceConfigList)).isTrue()
}
}
@@ -448,7 +473,47 @@
)
GuaranteedConfigurationsUtil.getConcurrentSupportedCombinationList().also {
assertThat(isAllSubConfigListSupported(
- true, supportedSurfaceCombination, it)).isTrue()
+ CameraMode.CONCURRENT_CAMERA, supportedSurfaceCombination, it)).isTrue()
+ }
+ }
+
+ @Test
+ @Config(minSdk = Build.VERSION_CODES.S)
+ fun checkUltraHighResolutionSurfaceCombinationSupportedInUltraHighCameraMode() {
+ setupCameraAndInitCameraX(
+ maximumResolutionSupportedSizes = MAXIMUM_RESOLUTION_SUPPORTED_SIZES,
+ maximumResolutionHighResolutionSupportedSizes =
+ MAXIMUM_RESOLUTION_HIGH_RESOLUTION_SUPPORTED_SIZES,
+ capabilities = intArrayOf(
+ CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR
+ )
+ )
+ val supportedSurfaceCombination = SupportedSurfaceCombination(
+ context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
+ )
+ GuaranteedConfigurationsUtil.getUltraHighResolutionSupportedCombinationList().forEach {
+ assertThat(supportedSurfaceCombination.checkSupported(
+ CameraMode.ULTRA_HIGH_RESOLUTION_CAMERA, it.surfaceConfigList)).isTrue()
+ }
+ }
+
+ @Test
+ @Config(minSdk = Build.VERSION_CODES.S)
+ fun checkUltraHighResolutionSurfaceCombinationSubListSupportedInUltraHighCameraMode() {
+ setupCameraAndInitCameraX(
+ maximumResolutionSupportedSizes = MAXIMUM_RESOLUTION_SUPPORTED_SIZES,
+ maximumResolutionHighResolutionSupportedSizes =
+ MAXIMUM_RESOLUTION_HIGH_RESOLUTION_SUPPORTED_SIZES,
+ capabilities = intArrayOf(
+ CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR
+ )
+ )
+ val supportedSurfaceCombination = SupportedSurfaceCombination(
+ context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
+ )
+ GuaranteedConfigurationsUtil.getUltraHighResolutionSupportedCombinationList().also {
+ assertThat(isAllSubConfigListSupported(
+ CameraMode.ULTRA_HIGH_RESOLUTION_CAMERA, supportedSurfaceCombination, it)).isTrue()
}
}
@@ -465,7 +530,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.YUV_420_888, RESOLUTION_VGA
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.YUV, ConfigSize.VGA)
@@ -479,7 +544,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.YUV_420_888, PREVIEW_SIZE
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.YUV, ConfigSize.PREVIEW)
@@ -493,7 +558,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.YUV_420_888, RECORD_SIZE
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.YUV, ConfigSize.RECORD)
@@ -507,7 +572,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.YUV_420_888, MAXIMUM_SIZE
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.YUV, ConfigSize.MAXIMUM)
@@ -521,7 +586,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.JPEG, RESOLUTION_VGA
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.JPEG, ConfigSize.VGA)
@@ -535,7 +600,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.JPEG, PREVIEW_SIZE
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.JPEG, ConfigSize.PREVIEW)
@@ -549,7 +614,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.JPEG, RECORD_SIZE
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.JPEG, ConfigSize.RECORD)
@@ -563,7 +628,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.JPEG, MAXIMUM_SIZE
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.JPEG, ConfigSize.MAXIMUM)
@@ -578,7 +643,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- true,
+ CameraMode.CONCURRENT_CAMERA,
ImageFormat.PRIVATE, RESOLUTION_720P
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.PRIV, ConfigSize.s720p)
@@ -593,7 +658,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- true,
+ CameraMode.CONCURRENT_CAMERA,
ImageFormat.YUV_420_888, RESOLUTION_720P
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.YUV, ConfigSize.s720p)
@@ -608,7 +673,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- true,
+ CameraMode.CONCURRENT_CAMERA,
ImageFormat.JPEG, RESOLUTION_720P
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.JPEG, ConfigSize.s720p)
@@ -623,7 +688,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- true,
+ CameraMode.CONCURRENT_CAMERA,
ImageFormat.PRIVATE, RESOLUTION_1440P
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.PRIV, ConfigSize.s1440p)
@@ -638,7 +703,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- true,
+ CameraMode.CONCURRENT_CAMERA,
ImageFormat.YUV_420_888, RESOLUTION_1440P
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.YUV, ConfigSize.s1440p)
@@ -653,7 +718,7 @@
context, DEFAULT_CAMERA_ID, cameraManagerCompat!!, mockCamcorderProfileHelper
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
- true,
+ CameraMode.CONCURRENT_CAMERA,
ImageFormat.JPEG, RESOLUTION_1440P
)
val expectedSurfaceConfig = SurfaceConfig.create(ConfigType.JPEG, ConfigSize.s1440p)
@@ -676,19 +741,19 @@
)
assertThat(
supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.PRIVATE, ULTRA_HIGH_MAXIMUM_SIZE
)
).isEqualTo(SurfaceConfig.create(ConfigType.PRIV, ConfigSize.ULTRA_MAXIMUM))
assertThat(
supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.YUV_420_888, ULTRA_HIGH_MAXIMUM_SIZE
)
).isEqualTo(SurfaceConfig.create(ConfigType.YUV, ConfigSize.ULTRA_MAXIMUM))
assertThat(
supportedSurfaceCombination.transformSurfaceConfig(
- false,
+ CameraMode.DEFAULT,
ImageFormat.JPEG, ULTRA_HIGH_MAXIMUM_SIZE
)
).isEqualTo(SurfaceConfig.create(ConfigType.JPEG, ConfigSize.ULTRA_MAXIMUM))
@@ -1397,7 +1462,7 @@
val useCaseConfigToOutputSizesMap =
getUseCaseConfigToOutputSizesMap(useCaseConfigMap.values.toList())
val suggestedStreamSpecs = supportedSurfaceCombination.getSuggestedStreamSpecifications(
- false,
+ CameraMode.DEFAULT,
attachedSurfaceInfoList,
useCaseConfigToOutputSizesMap
)
@@ -2194,7 +2259,7 @@
}
private fun isAllSubConfigListSupported(
- isConcurrentCameraModeOn: Boolean,
+ cameraMode: Int = CameraMode.DEFAULT,
supportedSurfaceCombination: SupportedSurfaceCombination,
combinationList: List<SurfaceCombination>
): Boolean {
@@ -2210,7 +2275,7 @@
removeAt(index)
}
if (!supportedSurfaceCombination.checkSupported(
- isConcurrentCameraModeOn, subConfigurationList
+ cameraMode, subConfigurationList
)
) {
return false
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java
index 48bd32c..b0c0a2a 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java
@@ -55,23 +55,9 @@
}
/**
- * Check whether the input surface configuration list is under the capability of any combination
- * of this object.
- *
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
- * @param cameraId the camera id of the camera device to be compared
- * @param surfaceConfigList the surface configuration list to be compared
- * @return the check result that whether it could be supported
- */
- boolean checkSupported(
- boolean isConcurrentCameraModeOn,
- @NonNull String cameraId,
- @Nullable List<SurfaceConfig> surfaceConfigList);
-
- /**
* Transform to a SurfaceConfig object with cameraId, image format and size info
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
+ * @param cameraMode the working camera mode.
* @param cameraId the camera id of the camera device to transform the object
* @param imageFormat the image format info for the surface configuration object
* @param size the size info for the surface configuration object
@@ -79,7 +65,7 @@
*/
@Nullable
SurfaceConfig transformSurfaceConfig(
- boolean isConcurrentCameraModeOn,
+ @CameraMode.Mode int cameraMode,
@NonNull String cameraId,
int imageFormat,
@NonNull Size size);
@@ -87,8 +73,7 @@
/**
* Retrieves a map of suggested stream specifications for the given list of use cases.
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise
- * false.
+ * @param cameraMode the working camera mode.
* @param cameraId the camera id of the camera device used by the
* use cases
* @param existingSurfaces list of surfaces already configured and used by
@@ -106,7 +91,7 @@
*/
@NonNull
Map<UseCaseConfig<?>, StreamSpec> getSuggestedStreamSpecs(
- boolean isConcurrentCameraModeOn,
+ @CameraMode.Mode int cameraMode,
@NonNull String cameraId,
@NonNull List<AttachedSurfaceInfo> existingSurfaces,
@NonNull Map<UseCaseConfig<?>, List<Size>> newUseCaseConfigsSupportedSizeMap);
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraMode.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraMode.java
new file mode 100644
index 0000000..322f141
--- /dev/null
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraMode.java
@@ -0,0 +1,61 @@
+/*
+ * 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.core.impl;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.RequiresApi;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * The available camera modes.
+ *
+ * <p>Camera devices might work in different camera modes:
+ * <ul>
+ * <li> Default mode
+ * <li> Concurrent mode
+ * <li> Maximum resolution sensor pixel mode
+ * <li> HDR 10-bit mode
+ * </ul>
+ *
+ * <p>The surface combination that is used depends on the camera mode. The defined constants are
+ * used to identify which supported surface combination list should be used.
+ */
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+public final class CameraMode {
+ /**
+ * The camera is in the default mode.
+ */
+ public static final int DEFAULT = 0;
+ /**
+ * The camera is running in the concurrent camera mode.
+ */
+ public static final int CONCURRENT_CAMERA = 1;
+ /**
+ * The camera is running in the ultra high resolution camera mode.
+ */
+ public static final int ULTRA_HIGH_RESOLUTION_CAMERA = 2;
+
+ @IntDef({DEFAULT, CONCURRENT_CAMERA, ULTRA_HIGH_RESOLUTION_CAMERA})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface Mode {
+ }
+
+ private CameraMode() {
+ }
+}
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 544579e..1f98de1 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
@@ -103,7 +103,7 @@
/**
* Transform to a SurfaceConfig object with image format and size info
*
- * @param isConcurrentCameraModeOn true if concurrent camera mode is on, otherwise false.
+ * @param cameraMode the working camera mode.
* @param imageFormat the image format info for the surface configuration object
* @param size the size info for the surface configuration object
* @param surfaceSizeDefinition the surface definition for the surface configuration object
@@ -111,7 +111,7 @@
*/
@NonNull
public static SurfaceConfig transformSurfaceConfig(
- boolean isConcurrentCameraModeOn,
+ @CameraMode.Mode int cameraMode,
int imageFormat,
@NonNull Size size,
@NonNull SurfaceSizeDefinition surfaceSizeDefinition) {
@@ -122,7 +122,7 @@
// Compare with surface size definition to determine the surface configuration size
int sizeArea = SizeUtil.getArea(size);
- if (isConcurrentCameraModeOn) {
+ if (cameraMode == CameraMode.CONCURRENT_CAMERA) {
if (sizeArea <= SizeUtil.getArea(surfaceSizeDefinition.getS720pSize(imageFormat))) {
configSize = ConfigSize.s720p;
} else if (sizeArea <= SizeUtil.getArea(surfaceSizeDefinition.getS1440pSize(
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/internal/CameraUseCaseAdapter.java b/camera/camera-core/src/main/java/androidx/camera/core/internal/CameraUseCaseAdapter.java
index 345fe82..5112f97 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/internal/CameraUseCaseAdapter.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/internal/CameraUseCaseAdapter.java
@@ -56,6 +56,7 @@
import androidx.camera.core.impl.CameraDeviceSurfaceManager;
import androidx.camera.core.impl.CameraInfoInternal;
import androidx.camera.core.impl.CameraInternal;
+import androidx.camera.core.impl.CameraMode;
import androidx.camera.core.impl.Config;
import androidx.camera.core.impl.StreamSpec;
import androidx.camera.core.impl.SurfaceConfig;
@@ -282,8 +283,7 @@
Map<UseCase, StreamSpec> suggestedStreamSpecMap;
try {
suggestedStreamSpecMap = calculateSuggestedStreamSpecs(
- mCameraCoordinator.getCameraOperatingMode()
- == CameraCoordinator.CAMERA_OPERATING_MODE_CONCURRENT,
+ getCameraMode(),
mCameraInternal.getCameraInfoInternal(), cameraUseCasesToAttach,
cameraUseCasesToKeep, configs);
// TODO(b/265704882): enable stream sharing for LEVEL_3 and high preview
@@ -344,6 +344,20 @@
}
}
+ private @CameraMode.Mode int getCameraMode() {
+ synchronized (mLock) {
+ if (mCameraCoordinator.getCameraOperatingMode()
+ == CameraCoordinator.CAMERA_OPERATING_MODE_CONCURRENT) {
+ return CameraMode.CONCURRENT_CAMERA;
+ }
+ }
+
+ // TODO(b/271199876): return ULTRA_HIGH_RESOLUTION_CAMERA when it can be enabled via
+ // Camera2Interop
+
+ return CameraMode.DEFAULT;
+ }
+
private boolean hasNoExtension() {
synchronized (mLock) {
return mCameraConfig == CameraConfigs.emptyConfig();
@@ -528,7 +542,7 @@
}
private Map<UseCase, StreamSpec> calculateSuggestedStreamSpecs(
- boolean isConcurrentCameraModeOn,
+ @CameraMode.Mode int cameraMode,
@NonNull CameraInfoInternal cameraInfoInternal,
@NonNull Collection<UseCase> newUseCases,
@NonNull Collection<UseCase> currentUseCases,
@@ -541,7 +555,7 @@
for (UseCase useCase : currentUseCases) {
SurfaceConfig surfaceConfig =
mCameraDeviceSurfaceManager.transformSurfaceConfig(
- isConcurrentCameraModeOn,
+ cameraMode,
cameraId,
useCase.getImageFormat(),
useCase.getAttachedSurfaceResolution());
@@ -581,7 +595,7 @@
// Get suggested stream specifications and update the use case session configuration
Map<UseCaseConfig<?>, StreamSpec> useCaseConfigStreamSpecMap =
mCameraDeviceSurfaceManager.getSuggestedStreamSpecs(
- isConcurrentCameraModeOn,
+ cameraMode,
cameraId, existingSurfaces,
configToSupportedSizesMap);
@@ -814,8 +828,7 @@
Map<UseCase, ConfigPair> configs = getConfigs(Arrays.asList(useCases),
mCameraConfig.getUseCaseConfigFactory(), mUseCaseConfigFactory);
calculateSuggestedStreamSpecs(
- mCameraCoordinator.getCameraOperatingMode()
- == CameraCoordinator.CAMERA_OPERATING_MODE_CONCURRENT,
+ getCameraMode(),
mCameraInternal.getCameraInfoInternal(),
Arrays.asList(useCases), emptyList(), configs);
} catch (IllegalArgumentException e) {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/StreamSharing.java b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/StreamSharing.java
index 5eabff9..8f36c1d 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/StreamSharing.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/StreamSharing.java
@@ -52,6 +52,8 @@
import androidx.camera.core.processing.SurfaceEdge;
import androidx.camera.core.processing.SurfaceProcessorNode;
+import com.google.common.util.concurrent.ListenableFuture;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -97,12 +99,12 @@
public StreamSharing(@NonNull CameraInternal parentCamera,
@NonNull Set<UseCase> children,
@NonNull UseCaseConfigFactory useCaseConfigFactory) {
- this(new VirtualCamera(parentCamera, children, useCaseConfigFactory));
- }
-
- StreamSharing(@NonNull VirtualCamera virtualCamera) {
super(DEFAULT_CONFIG);
- mVirtualCamera = virtualCamera;
+ mVirtualCamera = new VirtualCamera(parentCamera, children, useCaseConfigFactory,
+ () -> {
+ // TODO: Ask the DefaultSurfaceProcessor to take a snapshot.
+ throw new UnsupportedOperationException();
+ });
}
@Nullable
@@ -295,6 +297,18 @@
return new Rect(0, 0, surfaceResolution.getWidth(), surfaceResolution.getHeight());
}
+ /**
+ * Interface for controlling the {@link StreamSharing}.
+ */
+ interface Control {
+
+ /**
+ * Takes a snapshot of the current stream and write it to the children with JPEG Surface.
+ */
+ @NonNull
+ ListenableFuture<Void> jpegSnapshot();
+ }
+
@VisibleForTesting
@Nullable
SurfaceEdge getCameraEdge() {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/VirtualCamera.java b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/VirtualCamera.java
index f6af202..64bb811 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/VirtualCamera.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/VirtualCamera.java
@@ -87,6 +87,8 @@
// The callback that receives the parent camera's metadata.
@NonNull
private final CameraCaptureCallback mParentMetadataCallback = createCameraCaptureCallback();
+ @NonNull
+ private final VirtualCameraControl mVirtualCameraControl;
/**
* @param parentCamera the parent {@link CameraInternal} instance. For example, the
@@ -96,10 +98,13 @@
*/
VirtualCamera(@NonNull CameraInternal parentCamera,
@NonNull Set<UseCase> children,
- @NonNull UseCaseConfigFactory useCaseConfigFactory) {
+ @NonNull UseCaseConfigFactory useCaseConfigFactory,
+ @NonNull StreamSharing.Control streamSharingControl) {
mParentCamera = parentCamera;
mUseCaseConfigFactory = useCaseConfigFactory;
mChildren = children;
+ mVirtualCameraControl = new VirtualCameraControl(parentCamera.getCameraControlInternal(),
+ streamSharingControl);
// Set children state to inactive by default.
for (UseCase child : children) {
mChildrenActiveState.put(child, false);
@@ -279,7 +284,7 @@
@NonNull
@Override
public CameraControlInternal getCameraControlInternal() {
- return mParentCamera.getCameraControlInternal();
+ return mVirtualCameraControl;
}
@NonNull
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/VirtualCameraControl.java b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/VirtualCameraControl.java
new file mode 100644
index 0000000..887e1e5
--- /dev/null
+++ b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/VirtualCameraControl.java
@@ -0,0 +1,154 @@
+/*
+ * 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.core.streamsharing;
+
+import static androidx.core.util.Preconditions.checkArgument;
+
+import static java.util.Collections.singletonList;
+
+import android.graphics.Rect;
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.FocusMeteringAction;
+import androidx.camera.core.FocusMeteringResult;
+import androidx.camera.core.ImageCapture;
+import androidx.camera.core.impl.CameraControlInternal;
+import androidx.camera.core.impl.CaptureConfig;
+import androidx.camera.core.impl.Config;
+import androidx.camera.core.impl.SessionConfig;
+import androidx.camera.core.impl.utils.futures.Futures;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.List;
+
+/**
+ * A {@link CameraControlInternal} that is used to control the virtual camera.
+ */
+@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+public class VirtualCameraControl implements CameraControlInternal {
+
+ private final CameraControlInternal mParent;
+ private final StreamSharing.Control mStreamSharingControl;
+
+ VirtualCameraControl(@NonNull CameraControlInternal parent,
+ @NonNull StreamSharing.Control streamSharingControl) {
+ mParent = parent;
+ mStreamSharingControl = streamSharingControl;
+ }
+
+ @NonNull
+ @Override
+ public ListenableFuture<Void> enableTorch(boolean torch) {
+ return mParent.enableTorch(torch);
+ }
+
+ @NonNull
+ @Override
+ public ListenableFuture<FocusMeteringResult> startFocusAndMetering(
+ @NonNull FocusMeteringAction action) {
+ return mParent.startFocusAndMetering(action);
+ }
+
+ @NonNull
+ @Override
+ public ListenableFuture<Void> cancelFocusAndMetering() {
+ return mParent.cancelFocusAndMetering();
+ }
+
+ @NonNull
+ @Override
+ public ListenableFuture<Void> setZoomRatio(float ratio) {
+ return mParent.setZoomRatio(ratio);
+ }
+
+ @NonNull
+ @Override
+ public ListenableFuture<Void> setLinearZoom(float linearZoom) {
+ return mParent.setLinearZoom(linearZoom);
+ }
+
+ @NonNull
+ @Override
+ public ListenableFuture<Integer> setExposureCompensationIndex(int value) {
+ return mParent.setExposureCompensationIndex(value);
+ }
+
+ @Override
+ public int getFlashMode() {
+ return mParent.getFlashMode();
+ }
+
+ @Override
+ public void setFlashMode(int flashMode) {
+ mParent.setFlashMode(flashMode);
+ }
+
+ @Override
+ public void addZslConfig(@NonNull SessionConfig.Builder sessionConfigBuilder) {
+ mParent.addZslConfig(sessionConfigBuilder);
+ }
+
+ @Override
+ public void setZslDisabledByUserCaseConfig(boolean disabled) {
+ mParent.setZslDisabledByUserCaseConfig(disabled);
+ }
+
+ @Override
+ public boolean isZslDisabledByByUserCaseConfig() {
+ return mParent.isZslDisabledByByUserCaseConfig();
+ }
+
+ @NonNull
+ @Override
+ public ListenableFuture<List<Void>> submitStillCaptureRequests(
+ @NonNull List<CaptureConfig> captureConfigs,
+ @ImageCapture.CaptureMode int captureMode,
+ @ImageCapture.FlashType int flashType) {
+ checkArgument(captureConfigs.size() == 1, "Only support one capture config.");
+ return Futures.allAsList(singletonList(mStreamSharingControl.jpegSnapshot()));
+ }
+
+ @NonNull
+ @Override
+ public SessionConfig getSessionConfig() {
+ return mParent.getSessionConfig();
+ }
+
+ @NonNull
+ @Override
+ public Rect getSensorRect() {
+ return mParent.getSensorRect();
+ }
+
+ @Override
+ public void addInteropConfig(@NonNull Config config) {
+ mParent.addInteropConfig(config);
+ }
+
+ @Override
+ public void clearInteropConfig() {
+ mParent.clearInteropConfig();
+ }
+
+ @NonNull
+ @Override
+ public Config getInteropConfig() {
+ return mParent.getInteropConfig();
+ }
+}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/streamsharing/VirtualCameraTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/streamsharing/VirtualCameraTest.kt
index 8f06cf2..fa7318c 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/streamsharing/VirtualCameraTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/streamsharing/VirtualCameraTest.kt
@@ -20,14 +20,20 @@
import android.graphics.Matrix
import android.graphics.Rect
import android.os.Build
+import android.os.Looper.getMainLooper
import android.util.Size
import androidx.camera.core.CameraEffect.PREVIEW
+import androidx.camera.core.ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY
+import androidx.camera.core.ImageCapture.FLASH_MODE_AUTO
import androidx.camera.core.MirrorMode.MIRROR_MODE_ON
import androidx.camera.core.UseCase
+import androidx.camera.core.impl.CameraControlInternal
+import androidx.camera.core.impl.CaptureConfig
import androidx.camera.core.impl.ImageFormatConstants.INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE
import androidx.camera.core.impl.SessionConfig
import androidx.camera.core.impl.SessionConfig.defaultEmptySessionConfig
import androidx.camera.core.impl.StreamSpec
+import androidx.camera.core.impl.utils.futures.Futures
import androidx.camera.core.processing.SurfaceEdge
import androidx.camera.testing.fakes.FakeCamera
import androidx.camera.testing.fakes.FakeDeferrableSurface
@@ -40,6 +46,7 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
+import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
@@ -73,10 +80,16 @@
)
private val useCaseConfigFactory = FakeUseCaseConfigFactory()
private lateinit var virtualCamera: VirtualCamera
+ private var snapshotTriggered = false
@Before
fun setUp() {
- virtualCamera = VirtualCamera(parentCamera, setOf(child1, child2), useCaseConfigFactory)
+ virtualCamera = VirtualCamera(
+ parentCamera, setOf(child1, child2), useCaseConfigFactory
+ ) {
+ snapshotTriggered = true
+ Futures.immediateFuture(null)
+ }
}
@After
@@ -87,6 +100,24 @@
}
@Test
+ fun submitStillCaptureRequests_triggersSnapshot() {
+ // Arrange.
+ virtualCamera.bindChildren()
+
+ // Act: submit a still capture request from a child.
+ val cameraControl = child1.camera!!.cameraControl as CameraControlInternal
+ cameraControl.submitStillCaptureRequests(
+ listOf(CaptureConfig.Builder().build()),
+ CAPTURE_MODE_MINIMIZE_LATENCY,
+ FLASH_MODE_AUTO
+ )
+ shadowOf(getMainLooper()).idle()
+
+ // The StreamSharing.Control is called to take a snapshot.
+ assertThat(snapshotTriggered).isTrue()
+ }
+
+ @Test
fun setUseCaseActiveAndInactive_surfaceConnectsAndDisconnects() {
// Arrange.
virtualCamera.bindChildren()
@@ -151,7 +182,6 @@
fun virtualCameraInheritsParentProperties() {
assertThat(virtualCamera.cameraState).isEqualTo(parentCamera.cameraState)
assertThat(virtualCamera.cameraInfo).isEqualTo(parentCamera.cameraInfo)
- assertThat(virtualCamera.cameraControl).isEqualTo(parentCamera.cameraControl)
}
@Test
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java
index cd5d637..b3ff181 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java
@@ -30,6 +30,7 @@
import androidx.annotation.RequiresApi;
import androidx.camera.core.impl.AttachedSurfaceInfo;
import androidx.camera.core.impl.CameraDeviceSurfaceManager;
+import androidx.camera.core.impl.CameraMode;
import androidx.camera.core.impl.StreamSpec;
import androidx.camera.core.impl.SurfaceConfig;
import androidx.camera.core.impl.UseCaseConfig;
@@ -69,17 +70,9 @@
}
@Override
- public boolean checkSupported(
- boolean isConcurrentCameraModeOn,
- @NonNull String cameraId,
- @Nullable List<SurfaceConfig> surfaceConfigList) {
- return false;
- }
-
- @Override
@Nullable
public SurfaceConfig transformSurfaceConfig(
- boolean isConcurrentCameraModeOn,
+ @CameraMode.Mode int cameraMode,
@NonNull String cameraId,
int imageFormat,
@NonNull Size size) {
@@ -92,7 +85,7 @@
@NonNull
@Override
public Map<UseCaseConfig<?>, StreamSpec> getSuggestedStreamSpecs(
- boolean isConcurrentCameraModeOn, @NonNull String cameraId,
+ @CameraMode.Mode int cameraMode, @NonNull String cameraId,
@NonNull List<AttachedSurfaceInfo> existingSurfaces,
@NonNull Map<UseCaseConfig<?>, List<Size>> newUseCaseConfigsSupportedSizeMap) {
List<UseCaseConfig<?>> newUseCaseConfigs =
diff --git a/camera/camera-testing/src/test/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManagerTest.java b/camera/camera-testing/src/test/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManagerTest.java
index 0f3fa1c..6d549cf 100644
--- a/camera/camera-testing/src/test/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManagerTest.java
+++ b/camera/camera-testing/src/test/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManagerTest.java
@@ -33,6 +33,7 @@
import androidx.annotation.NonNull;
import androidx.camera.core.ImageAnalysis;
import androidx.camera.core.impl.AttachedSurfaceInfo;
+import androidx.camera.core.impl.CameraMode;
import androidx.camera.core.impl.StreamSpec;
import androidx.camera.core.impl.SurfaceConfig;
import androidx.camera.core.impl.UseCaseConfig;
@@ -88,7 +89,7 @@
UseCaseConfig<?> preview = new FakeUseCaseConfig.Builder().getUseCaseConfig();
UseCaseConfig<?> analysis = new ImageAnalysis.Builder().getUseCaseConfig();
mFakeCameraDeviceSurfaceManager.getSuggestedStreamSpecs(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
FAKE_CAMERA_ID0,
emptyList(),
createConfigOutputSizesMap(preview, analysis));
@@ -104,7 +105,7 @@
new Size(1, 1),
new Range<>(30, 30));
mFakeCameraDeviceSurfaceManager.getSuggestedStreamSpecs(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
FAKE_CAMERA_ID0,
singletonList(analysis), createConfigOutputSizesMap(preview, video));
}
@@ -115,7 +116,7 @@
UseCaseConfig<?> video = new FakeUseCaseConfig.Builder().getUseCaseConfig();
UseCaseConfig<?> analysis = new ImageAnalysis.Builder().getUseCaseConfig();
mFakeCameraDeviceSurfaceManager.getSuggestedStreamSpecs(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
FAKE_CAMERA_ID0,
Collections.emptyList(), createConfigOutputSizesMap(preview, video, analysis));
}
@@ -124,12 +125,12 @@
public void canRetrieveInsertedSuggestedStreamSpecs() {
Map<UseCaseConfig<?>, StreamSpec> suggestedStreamSpecsCamera0 =
mFakeCameraDeviceSurfaceManager.getSuggestedStreamSpecs(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
FAKE_CAMERA_ID0,
Collections.emptyList(), createConfigOutputSizesMap(mFakeUseCaseConfig));
Map<UseCaseConfig<?>, StreamSpec> suggestedStreamSpecCamera1 =
mFakeCameraDeviceSurfaceManager.getSuggestedStreamSpecs(
- /* isConcurrentCameraModeOn = */false,
+ CameraMode.DEFAULT,
FAKE_CAMERA_ID1,
Collections.emptyList(), createConfigOutputSizesMap(mFakeUseCaseConfig));
diff --git a/car/app/app/api/public_plus_experimental_current.txt b/car/app/app/api/public_plus_experimental_current.txt
index c196ff1..7f3f5f9 100644
--- a/car/app/app/api/public_plus_experimental_current.txt
+++ b/car/app/app/api/public_plus_experimental_current.txt
@@ -45,6 +45,7 @@
field @Deprecated public static final String CATEGORY_PARKING_APP = "androidx.car.app.category.PARKING";
field public static final String CATEGORY_POI_APP = "androidx.car.app.category.POI";
field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_SETTINGS_APP = "androidx.car.app.category.SETTINGS";
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_WEATHER_APP = "androidx.car.app.category.WEATHER";
field public static final String SERVICE_INTERFACE = "androidx.car.app.CarAppService";
}
@@ -1152,8 +1153,9 @@
public static final class GridItem.Builder {
ctor public GridItem.Builder();
method public androidx.car.app.model.GridItem build();
- method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setBadge(androidx.car.app.model.Badge);
method public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon);
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, androidx.car.app.model.Badge);
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, int, androidx.car.app.model.Badge);
method public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, int);
method public androidx.car.app.model.GridItem.Builder setLoading(boolean);
method public androidx.car.app.model.GridItem.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
diff --git a/car/app/app/build.gradle b/car/app/app/build.gradle
index 5807cb4..ba71e90 100644
--- a/car/app/app/build.gradle
+++ b/car/app/app/build.gradle
@@ -72,7 +72,7 @@
}
project.ext {
- latestCarAppApiLevel = "6"
+ latestCarAppApiLevel = "7"
}
android {
diff --git a/car/app/app/src/main/java/androidx/car/app/CarAppService.java b/car/app/app/src/main/java/androidx/car/app/CarAppService.java
index a05b9f0..8f216df 100644
--- a/car/app/app/src/main/java/androidx/car/app/CarAppService.java
+++ b/car/app/app/src/main/java/androidx/car/app/CarAppService.java
@@ -150,6 +150,12 @@
@ExperimentalCarApi
public static final String CATEGORY_CALLING_APP = "androidx.car.app.category.CALLING";
+ /**
+ * Used to declare that this app is a weather app in the manifest.
+ */
+ @ExperimentalCarApi
+ public static final String CATEGORY_WEATHER_APP = "androidx.car.app.category.WEATHER";
+
private static final String AUTO_DRIVE = "AUTO_DRIVE";
@NonNull
diff --git a/car/app/app/src/main/java/androidx/car/app/model/GridItem.java b/car/app/app/src/main/java/androidx/car/app/model/GridItem.java
index a7afa7f..c16bb89 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/GridItem.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/GridItem.java
@@ -349,6 +349,47 @@
}
/**
+ * Sets an image to show in the grid item with the given {@link Badge} to be displayed over
+ * the image, with the default size {@link #IMAGE_TYPE_LARGE}.
+ *
+ * <p>A dot badge denotes some sort of call to action or notification and is
+ * displayed in the upper right corner of the image. An icon badge gives additional
+ * context about the image and is displayed in the lower right corner.
+ *
+ * @throws NullPointerException if {@code image} or {@code badge} is {@code null}
+ * @see #setImage(CarIcon, int)
+ */
+ @NonNull
+ @ExperimentalCarApi
+ @RequiresCarApi(7)
+ public Builder setImage(@NonNull CarIcon image, @NonNull Badge badge) {
+ requireNonNull(badge);
+ mBadge = badge;
+ return setImage(requireNonNull(image));
+ }
+
+ /**
+ * Sets an image to show in the grid item with the given {@code imageType} and given
+ * {@link Badge} to be displayed over the image.
+ *
+ * <p>A dot badge denotes a call to action or notification and is
+ * displayed in the upper right corner of the image. An icon badge gives additional
+ * context about the image and is displayed in the lower right corner.
+ *
+ * @throws NullPointerException if {@code image} or {@code badge} is {@code null}
+ * @see #setImage(CarIcon, int)
+ */
+ @NonNull
+ @ExperimentalCarApi
+ @RequiresCarApi(7)
+ public Builder setImage(@NonNull CarIcon image, @GridItemImageType int imageType,
+ @NonNull Badge badge) {
+ requireNonNull(badge);
+ mBadge = badge;
+ return setImage(requireNonNull(image), imageType);
+ }
+
+ /**
* Sets an image to show in the grid item with the given {@code imageType}.
*
* <p>For a custom {@link CarIcon}, its {@link androidx.core.graphics.drawable.IconCompat}
@@ -394,23 +435,6 @@
}
/**
- * Sets a {@link Badge} to be displayed over the grid item image.
- *
- * <p>A badge denotes some sort of call to action, notification, alert, etc.
- *
- * <p>A badge can only be set if an image is also set on the grid item.
- *
- * @param badge the {@link Badge} to display.
- */
- @NonNull
- @ExperimentalCarApi
- @RequiresCarApi(7)
- public Builder setBadge(@NonNull Badge badge) {
- mBadge = badge;
- return this;
- }
-
- /**
* Constructs the {@link GridItem} defined by this builder.
*
* @throws IllegalStateException if the grid item's title is not set, if the grid item's
diff --git a/car/app/app/src/test/java/androidx/car/app/model/GridItemTest.java b/car/app/app/src/test/java/androidx/car/app/model/GridItemTest.java
index af77551..6856d45 100644
--- a/car/app/app/src/test/java/androidx/car/app/model/GridItemTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/model/GridItemTest.java
@@ -163,19 +163,19 @@
}
@Test
- public void create_loadingWithBadge_throws() {
+ public void create_setImagewithBadge() {
Badge b = new Badge.Builder().setHasDot(true).build();
- GridItem.Builder builder =
- new GridItem.Builder().setTitle("Title").setLoading(true).setBadge(b);
+ GridItem gridItem =
+ new GridItem.Builder().setTitle("Title").setImage(BACK, b).build();
- assertThrows(IllegalStateException.class, () -> builder.build());
+ assertThat(gridItem.getBadge()).isEqualTo(b);
}
@Test
- public void create_withBadge() {
+ public void create_setImagewithTypeAndBadge() {
Badge b = new Badge.Builder().setHasDot(true).build();
- GridItem gridItem =
- new GridItem.Builder().setTitle("Title").setImage(BACK).setBadge(b).build();
+ GridItem gridItem = new GridItem.Builder().setTitle("Title")
+ .setImage(BACK, GridItem.IMAGE_TYPE_ICON, b).build();
assertThat(gridItem.getBadge()).isEqualTo(b);
}
@@ -188,13 +188,11 @@
GridItem g1 = new GridItem.Builder()
.setTitle(title)
.setText(text)
- .setImage(BACK)
- .setBadge(badge).build();
+ .setImage(BACK, badge).build();
GridItem g2 = new GridItem.Builder()
.setTitle(title)
.setText(text)
- .setImage(BACK)
- .setBadge(badge).build();
+ .setImage(BACK, badge).build();
assertThat(g1).isEqualTo(g2);
}
@@ -231,7 +229,7 @@
public void notEquals_differentBadge() {
Badge badge = new Badge.Builder().setHasDot(true).build();
GridItem withBadge = new GridItem.Builder()
- .setTitle("Title").setImage(BACK).setBadge(badge).build();
+ .setTitle("Title").setImage(BACK, badge).build();
GridItem noBadge = new GridItem.Builder().setTitle("Title").setImage(BACK).build();
assertThat(withBadge).isNotEqualTo(noBadge);
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AlignmentLine.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AlignmentLine.kt
index a088418..36aa00e 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AlignmentLine.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AlignmentLine.kt
@@ -17,17 +17,17 @@
package androidx.compose.foundation.layout
import androidx.compose.runtime.Stable
-import androidx.compose.ui.layout.AlignmentLine
-import androidx.compose.ui.layout.HorizontalAlignmentLine
-import androidx.compose.ui.layout.LayoutModifier
-import androidx.compose.ui.layout.Measurable
-import androidx.compose.ui.layout.MeasureScope
import androidx.compose.ui.Modifier
+import androidx.compose.ui.layout.AlignmentLine
import androidx.compose.ui.layout.FirstBaseline
+import androidx.compose.ui.layout.HorizontalAlignmentLine
import androidx.compose.ui.layout.LastBaseline
+import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasureResult
+import androidx.compose.ui.layout.MeasureScope
+import androidx.compose.ui.node.LayoutModifierNode
+import androidx.compose.ui.node.ModifierNodeElement
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.Dp
@@ -68,7 +68,7 @@
before: Dp = Dp.Unspecified,
after: Dp = Dp.Unspecified
): Modifier = this.then(
- AlignmentLineOffsetDp(
+ AlignmentLineOffsetDpElement(
alignmentLine,
before,
after,
@@ -114,7 +114,7 @@
before: TextUnit = TextUnit.Unspecified,
after: TextUnit = TextUnit.Unspecified
): Modifier = this.then(
- AlignmentLineOffsetTextUnit(
+ AlignmentLineOffsetTextUnitElement(
alignmentLine,
before,
after,
@@ -188,12 +188,12 @@
if (!bottom.isUnspecified) Modifier.paddingFrom(LastBaseline, after = bottom) else Modifier
)
-private class AlignmentLineOffsetDp(
+private class AlignmentLineOffsetDpElement(
val alignmentLine: AlignmentLine,
val before: Dp,
val after: Dp,
- inspectorInfo: InspectorInfo.() -> Unit
-) : LayoutModifier, InspectorValueInfo(inspectorInfo) {
+ val inspectorInfo: InspectorInfo.() -> Unit
+) : ModifierNodeElement<AlignmentLineOffsetDpNode>() {
init {
require(
(before.value >= 0f || before == Dp.Unspecified) &&
@@ -203,11 +203,32 @@
}
}
- override fun MeasureScope.measure(
- measurable: Measurable,
- constraints: Constraints
- ): MeasureResult {
- return alignmentLineOffsetMeasure(alignmentLine, before, after, measurable, constraints)
+ override fun create(): AlignmentLineOffsetDpNode {
+ return AlignmentLineOffsetDpNode(
+ alignmentLine,
+ before,
+ after
+ )
+ }
+
+ override fun update(node: AlignmentLineOffsetDpNode): AlignmentLineOffsetDpNode {
+ node.alignmentLine = alignmentLine
+ node.before = before
+ node.after = after
+ return node
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ inspectorInfo()
+ }
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ val otherModifier = other as? AlignmentLineOffsetDpElement ?: return false
+
+ return alignmentLine == otherModifier.alignmentLine &&
+ before == otherModifier.before &&
+ after == otherModifier.after
}
override fun hashCode(): Int {
@@ -216,36 +237,33 @@
result = 31 * result + after.hashCode()
return result
}
-
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- val otherModifier = other as? AlignmentLineOffsetDp ?: return false
-
- return alignmentLine == otherModifier.alignmentLine &&
- before == otherModifier.before &&
- after == otherModifier.after
- }
-
- override fun toString(): String =
- "AlignmentLineOffset(alignmentLine=$alignmentLine, before=$before, after=$after)"
}
-private class AlignmentLineOffsetTextUnit(
- val alignmentLine: AlignmentLine,
- val before: TextUnit,
- val after: TextUnit,
- inspectorInfo: InspectorInfo.() -> Unit
-) : LayoutModifier, InspectorValueInfo(inspectorInfo) {
+private class AlignmentLineOffsetDpNode(
+ var alignmentLine: AlignmentLine,
+ var before: Dp,
+ var after: Dp,
+) : LayoutModifierNode, Modifier.Node() {
+
override fun MeasureScope.measure(
measurable: Measurable,
constraints: Constraints
): MeasureResult {
- return alignmentLineOffsetMeasure(
+ return alignmentLineOffsetMeasure(alignmentLine, before, after, measurable, constraints)
+ }
+}
+
+private class AlignmentLineOffsetTextUnitElement(
+ val alignmentLine: AlignmentLine,
+ val before: TextUnit,
+ val after: TextUnit,
+ val inspectorInfo: InspectorInfo.() -> Unit
+) : ModifierNodeElement<AlignmentLineOffsetTextUnitNode>() {
+ override fun create(): AlignmentLineOffsetTextUnitNode {
+ return AlignmentLineOffsetTextUnitNode(
alignmentLine,
- if (!before.isUnspecified) before.toDp() else Dp.Unspecified,
- if (!after.isUnspecified) after.toDp() else Dp.Unspecified,
- measurable,
- constraints
+ before,
+ after
)
}
@@ -258,15 +276,42 @@
override fun equals(other: Any?): Boolean {
if (this === other) return true
- val otherModifier = other as? AlignmentLineOffsetTextUnit ?: return false
+ val otherModifier = other as? AlignmentLineOffsetTextUnitElement ?: return false
return alignmentLine == otherModifier.alignmentLine &&
before == otherModifier.before &&
after == otherModifier.after
}
- override fun toString(): String =
- "AlignmentLineOffset(alignmentLine=$alignmentLine, before=$before, after=$after)"
+ override fun InspectorInfo.inspectableProperties() {
+ return inspectorInfo()
+ }
+
+ override fun update(node: AlignmentLineOffsetTextUnitNode): AlignmentLineOffsetTextUnitNode {
+ node.alignmentLine = alignmentLine
+ node.before = before
+ node.after = after
+ return node
+ }
+}
+
+private class AlignmentLineOffsetTextUnitNode(
+ var alignmentLine: AlignmentLine,
+ var before: TextUnit,
+ var after: TextUnit,
+) : LayoutModifierNode, Modifier.Node() {
+ override fun MeasureScope.measure(
+ measurable: Measurable,
+ constraints: Constraints
+ ): MeasureResult {
+ return alignmentLineOffsetMeasure(
+ alignmentLine,
+ if (!before.isUnspecified) before.toDp() else Dp.Unspecified,
+ if (!after.isUnspecified) after.toDp() else Dp.Unspecified,
+ measurable,
+ constraints
+ )
+ }
}
private fun MeasureScope.alignmentLineOffsetMeasure(
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AspectRatio.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AspectRatio.kt
index ef7f397..d42d7f0 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AspectRatio.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AspectRatio.kt
@@ -17,15 +17,15 @@
package androidx.compose.foundation.layout
import androidx.compose.runtime.Stable
-import androidx.compose.ui.layout.LayoutModifier
import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasureScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.IntrinsicMeasurable
import androidx.compose.ui.layout.IntrinsicMeasureScope
import androidx.compose.ui.layout.MeasureResult
+import androidx.compose.ui.node.LayoutModifierNode
+import androidx.compose.ui.node.ModifierNodeElement
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.IntSize
@@ -56,7 +56,7 @@
ratio: Float,
matchHeightConstraintsFirst: Boolean = false
) = this.then(
- AspectRatioModifier(
+ AspectRatioElement(
ratio,
matchHeightConstraintsFirst,
debugInspectorInfo {
@@ -67,15 +67,45 @@
)
)
-private class AspectRatioModifier(
+private class AspectRatioElement(
val aspectRatio: Float,
val matchHeightConstraintsFirst: Boolean,
- inspectorInfo: InspectorInfo.() -> Unit
-) : LayoutModifier, InspectorValueInfo(inspectorInfo) {
+ val inspectorInfo: InspectorInfo.() -> Unit
+) : ModifierNodeElement<AspectRatioNode>() {
init {
require(aspectRatio > 0) { "aspectRatio $aspectRatio must be > 0" }
}
+ override fun create(): AspectRatioNode {
+ return AspectRatioNode(
+ aspectRatio,
+ matchHeightConstraintsFirst
+ )
+ }
+
+ override fun update(node: AspectRatioNode): AspectRatioNode {
+ node.aspectRatio = aspectRatio
+ node.matchHeightConstraintsFirst = matchHeightConstraintsFirst
+ return node
+ }
+
+ override fun InspectorInfo.inspectableProperties() { inspectorInfo() }
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ val otherModifier = other as? AspectRatioElement ?: return false
+ return aspectRatio == otherModifier.aspectRatio &&
+ matchHeightConstraintsFirst == other.matchHeightConstraintsFirst
+ }
+
+ override fun hashCode(): Int =
+ aspectRatio.hashCode() * 31 + matchHeightConstraintsFirst.hashCode()
+}
+
+private class AspectRatioNode(
+ var aspectRatio: Float,
+ var matchHeightConstraintsFirst: Boolean,
+) : LayoutModifierNode, Modifier.Node() {
override fun MeasureScope.measure(
measurable: Measurable,
constraints: Constraints
@@ -202,16 +232,4 @@
}
return IntSize.Zero
}
-
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- val otherModifier = other as? AspectRatioModifier ?: return false
- return aspectRatio == otherModifier.aspectRatio &&
- matchHeightConstraintsFirst == other.matchHeightConstraintsFirst
- }
-
- override fun hashCode(): Int =
- aspectRatio.hashCode() * 31 + matchHeightConstraintsFirst.hashCode()
-
- override fun toString(): String = "AspectRatioModifier(aspectRatio=$aspectRatio)"
}
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/selection/SelectableTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/selection/SelectableTest.kt
index 99af6f7..5b384af 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/selection/SelectableTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/selection/SelectableTest.kt
@@ -77,7 +77,6 @@
import kotlinx.coroutines.launch
import org.junit.After
import org.junit.Before
-import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -677,7 +676,6 @@
rule.runOnIdle { assertThat(counter).isEqualTo(1) }
}
- @Ignore // b/270412977
@Test
@OptIn(ExperimentalTestApi::class, ExperimentalComposeUiApi::class)
fun selectableTest_clickWithNumPadEnterKey() {
@@ -901,7 +899,6 @@
}
}
- @Ignore // b/270755858
@Test
@OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
fun selectableTest_otherKey_doesNotEmitIndication() {
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/SystemGestureExclusion.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/SystemGestureExclusion.kt
index 879e105..c798184e 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/SystemGestureExclusion.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/SystemGestureExclusion.kt
@@ -22,15 +22,15 @@
import androidx.annotation.RequiresApi
import androidx.compose.runtime.collection.mutableVectorOf
import androidx.compose.ui.Modifier
+import androidx.compose.ui.composed
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.layout.LayoutCoordinates
import androidx.compose.ui.layout.boundsInRoot
-import androidx.compose.ui.node.CompositionLocalConsumerModifierNode
import androidx.compose.ui.node.GlobalPositionAwareModifierNode
import androidx.compose.ui.node.ModifierNodeElement
-import androidx.compose.ui.node.currentValueOf
import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.platform.LocalView
+import androidx.compose.ui.platform.debugInspectorInfo
import kotlin.math.roundToInt
/**
@@ -66,29 +66,41 @@
@RequiresApi(Build.VERSION_CODES.Q)
private inline fun excludeFromSystemGestureQ(
noinline exclusion: ((LayoutCoordinates) -> Rect)?
-): Modifier = ExcludeFromSystemGestureElement(exclusion)
+): Modifier = Modifier.composed(
+ debugInspectorInfo {
+ name = "systemGestureExclusion"
+ if (exclusion != null) {
+ properties["exclusion"] = exclusion
+ }
+ }
+) {
+ val view = LocalView.current
+ ExcludeFromSystemGestureElement(exclusion, view)
+}
@RequiresApi(Build.VERSION_CODES.Q)
private class ExcludeFromSystemGestureElement(
- val exclusion: ((LayoutCoordinates) -> Rect)?
+ val exclusion: ((LayoutCoordinates) -> Rect)?,
+ val view: View
) : ModifierNodeElement<ExcludeFromSystemGestureNode>() {
@SuppressLint("NewApi")
override fun create(): ExcludeFromSystemGestureNode {
- return ExcludeFromSystemGestureNode(exclusion)
+ return ExcludeFromSystemGestureNode(exclusion, view)
}
override fun update(node: ExcludeFromSystemGestureNode): ExcludeFromSystemGestureNode =
node.also {
it.exclusion = exclusion
+ it.view = view
}
override fun hashCode(): Int {
- return exclusion.hashCode()
+ return exclusion.hashCode() + view.hashCode()
}
override fun equals(other: Any?): Boolean {
if (other !is ExcludeFromSystemGestureElement) return false
- return exclusion == other.exclusion
+ return exclusion == other.exclusion && view == other.view
}
override fun InspectorInfo.inspectableProperties() {
@@ -101,13 +113,11 @@
@RequiresApi(Build.VERSION_CODES.Q)
private class ExcludeFromSystemGestureNode(
- var exclusion: ((LayoutCoordinates) -> Rect)?
-) : Modifier.Node(), GlobalPositionAwareModifierNode, CompositionLocalConsumerModifierNode {
+ var exclusion: ((LayoutCoordinates) -> Rect)?,
+ var view: View
+) : Modifier.Node(), GlobalPositionAwareModifierNode {
var rect: android.graphics.Rect? = null
- private val view: View
- get() = currentValueOf(LocalView)
-
override fun onGloballyPositioned(coordinates: LayoutCoordinates) {
val newRect = if (exclusion == null) {
val boundsInRoot = coordinates.boundsInRoot()
diff --git a/compose/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml b/compose/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
index e228203..8d6b34e 100644
--- a/compose/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
+++ b/compose/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
@@ -34,10 +34,10 @@
<activity
android:name=".TrivialStartupActivity"
android:exported="true">
-<!-- <intent-filter>-->
-<!-- <action android:name="android.intent.action.MAIN" />-->
-<!-- <category android:name="android.intent.category.LAUNCHER" />-->
-<!-- </intent-filter>-->
+ <!-- <intent-filter>-->
+ <!-- <action android:name="android.intent.action.MAIN" />-->
+ <!-- <category android:name="android.intent.category.LAUNCHER" />-->
+ <!-- </intent-filter>-->
<intent-filter>
<action android:name="androidx.compose.integration.macrobenchmark.target.TRIVIAL_STARTUP_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
@@ -54,10 +54,10 @@
<activity
android:name=".IoSettingsActivity"
android:exported="true">
-<!-- <intent-filter>-->
-<!-- <action android:name="android.intent.action.MAIN" />-->
-<!-- <category android:name="android.intent.category.LAUNCHER" />-->
-<!-- </intent-filter>-->
+ <!-- <intent-filter>-->
+ <!-- <action android:name="android.intent.action.MAIN" />-->
+ <!-- <category android:name="android.intent.category.LAUNCHER" />-->
+ <!-- </intent-filter>-->
<intent-filter>
<action android:name="androidx.compose.integration.macrobenchmark.target.IO_SETTINGS_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
@@ -123,6 +123,26 @@
</activity>
<activity
+ android:name=".RecyclerViewAsCarouselActivity"
+ android:exported="true"
+ android:theme="@style/Theme.AppCompat">
+ <intent-filter>
+ <action android:name="androidx.compose.integration.macrobenchmark.target.RecyclerViewAsCarouselActivity" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+
+ <activity
+ android:name=".PagerAsCarouselActivity"
+ android:exported="true"
+ android:theme="@style/Theme.AppCompat">
+ <intent-filter>
+ <action android:name="androidx.compose.integration.macrobenchmark.target.PagerAsCarouselActivity" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+
+ <activity
android:name=".PagerActivity"
android:exported="true"
android:theme="@style/Theme.AppCompat">
diff --git a/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/integration/macrobenchmark/target/PagerAsCarouselActivity.kt b/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/integration/macrobenchmark/target/PagerAsCarouselActivity.kt
new file mode 100644
index 0000000..50fc66b
--- /dev/null
+++ b/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/integration/macrobenchmark/target/PagerAsCarouselActivity.kt
@@ -0,0 +1,86 @@
+/*
+ * 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.integration.macrobenchmark.target
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.pager.HorizontalPager
+import androidx.compose.foundation.pager.PageSize
+import androidx.compose.foundation.pager.rememberPagerState
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.semantics.contentDescription
+import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.unit.dp
+
+class PagerAsCarouselActivity : ComponentActivity() {
+ @OptIn(ExperimentalFoundationApi::class)
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ val itemCount = intent.getIntExtra(ExtraItemCount, 3000)
+
+ setContent {
+ val pagerState = rememberPagerState()
+ Box(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(Color.White),
+ contentAlignment = Alignment.Center
+ ) {
+ HorizontalPager(
+ modifier = Modifier
+ .semantics { contentDescription = "Carousel" }
+ .background(Color.White),
+ state = pagerState,
+ pageCount = itemCount,
+ pageSize = PageSize.Fixed(200.dp)
+ ) {
+ PagerItem(it)
+ }
+ }
+ }
+
+ launchIdlenessTracking()
+ }
+
+ companion object {
+ const val ExtraItemCount = "ITEM_COUNT"
+ }
+}
+
+@Composable
+private fun PagerItem(index: Int) {
+ Box(
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(200.dp)
+ .background(Color.Black)
+ ) {
+ Text(text = index.toString(), color = Color.White)
+ }
+}
\ No newline at end of file
diff --git a/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/integration/macrobenchmark/target/RecyclerViewAsCarouselActivity.kt b/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/integration/macrobenchmark/target/RecyclerViewAsCarouselActivity.kt
new file mode 100644
index 0000000..3766e35
--- /dev/null
+++ b/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/integration/macrobenchmark/target/RecyclerViewAsCarouselActivity.kt
@@ -0,0 +1,73 @@
+/*
+ * 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.integration.macrobenchmark.target
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.PagerSnapHelper
+import androidx.recyclerview.widget.RecyclerView
+
+class RecyclerViewAsCarouselActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_view_carousel)
+ val pager = findViewById<RecyclerView>(R.id.carousel)
+ pager.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
+ val itemCount = intent.getIntExtra(ExtraItemCount, 3000)
+ val adapter = RecyclerViewAdapter(itemCount)
+ val scroller = PagerSnapHelper()
+ scroller.attachToRecyclerView(pager)
+ pager.adapter = adapter
+ launchIdlenessTracking()
+ }
+
+ companion object {
+ const val ExtraItemCount = "ITEM_COUNT"
+ }
+}
+
+private class RecyclerViewAdapter(val items: Int) :
+ RecyclerView.Adapter<RecyclerViewAsPagerViewHolder>() {
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): RecyclerViewAsPagerViewHolder {
+ val view = LayoutInflater
+ .from(parent.context)
+ .inflate(R.layout.recycler_view_as_carousel_item, parent, false)
+
+ return RecyclerViewAsPagerViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: RecyclerViewAsPagerViewHolder, position: Int) {
+ holder.bind(position.toString())
+ }
+
+ override fun getItemCount(): Int = items
+}
+
+private class RecyclerViewAsPagerViewHolder(val itemView: View) :
+ RecyclerView.ViewHolder(itemView) {
+ fun bind(item: String) {
+ itemView.findViewById<TextView>(R.id.view_carousel_item).text = item
+ }
+}
\ No newline at end of file
diff --git a/compose/integration-tests/macrobenchmark-target/src/main/res/layout/activity_view_carousel.xml b/compose/integration-tests/macrobenchmark-target/src/main/res/layout/activity_view_carousel.xml
new file mode 100644
index 0000000..61e862c
--- /dev/null
+++ b/compose/integration-tests/macrobenchmark-target/src/main/res/layout/activity_view_carousel.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Copyright 20233 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:background="#fff"
+ android:layout_gravity="center"
+ android:gravity="center"
+ android:layout_width="match_parent"
+ android:layout_height="400dp">
+
+ <androidx.viewpager2.widget.ViewPager2
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/carousel"
+ android:layout_gravity="center"
+ android:gravity="center"
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+</FrameLayout>
\ No newline at end of file
diff --git a/compose/integration-tests/macrobenchmark-target/src/main/res/layout/recycler_view_as_carousel_item.xml b/compose/integration-tests/macrobenchmark-target/src/main/res/layout/recycler_view_as_carousel_item.xml
new file mode 100644
index 0000000..03eb6bd
--- /dev/null
+++ b/compose/integration-tests/macrobenchmark-target/src/main/res/layout/recycler_view_as_carousel_item.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Copyright 2023 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="200dp"
+ android:background="#000000"
+ android:layout_height="200dp"
+ android:layout_gravity="center">
+
+ <TextView
+ android:id="@+id/view_carousel_item"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+</FrameLayout>
\ No newline at end of file
diff --git a/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/PagerAsCarouselBenchmark.kt b/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/PagerAsCarouselBenchmark.kt
new file mode 100644
index 0000000..f28d5ac
--- /dev/null
+++ b/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/PagerAsCarouselBenchmark.kt
@@ -0,0 +1,100 @@
+/*
+ * 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.integration.macrobenchmark
+
+import android.content.Intent
+import androidx.benchmark.macro.CompilationMode
+import androidx.benchmark.macro.FrameTimingMetric
+import androidx.benchmark.macro.junit4.MacrobenchmarkRule
+import androidx.test.filters.LargeTest
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.By
+import androidx.test.uiautomator.Direction
+import androidx.test.uiautomator.UiDevice
+import androidx.test.uiautomator.UiObject2
+import androidx.test.uiautomator.Until
+import androidx.testutils.createCompilationParams
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@LargeTest
+@RunWith(Parameterized::class)
+class PagerAsCarouselBenchmark(
+ private val compilationMode: CompilationMode
+) {
+ @get:Rule
+ val benchmarkRule = MacrobenchmarkRule()
+
+ private lateinit var device: UiDevice
+
+ @Before
+ fun setUp() {
+ val instrumentation = InstrumentationRegistry.getInstrumentation()
+ device = UiDevice.getInstance(instrumentation)
+ }
+
+ @Test
+ fun scroll() {
+ val carousel = device.findObject(By.desc(ContentDescription))
+ benchmarkRule.performRepeatedScroll(PackageName, compilationMode, Action, carousel) {
+ device.wait(Until.findObject(By.desc(ComposeIdle)), 3000)
+ }
+ }
+
+ companion object {
+ private const val PackageName = "androidx.compose.integration.macrobenchmark.target"
+ private const val Action =
+ "androidx.compose.integration.macrobenchmark.target.PagerAsCarouselActivity"
+ private const val ContentDescription = "Carousel"
+ private const val ComposeIdle = "COMPOSE-IDLE"
+
+ @Parameterized.Parameters(name = "compilation={0}")
+ @JvmStatic
+ fun parameters() = createCompilationParams()
+ }
+}
+
+internal fun MacrobenchmarkRule.performRepeatedScroll(
+ packageName: String,
+ compilationMode: CompilationMode,
+ intentAction: String,
+ targetComponent: UiObject2,
+ repeatCount: Int = 10,
+ onSwipeFinished: () -> Unit
+) {
+ measureRepeated(
+ packageName = packageName,
+ metrics = listOf(FrameTimingMetric()),
+ compilationMode = compilationMode,
+ iterations = 10,
+ setupBlock = {
+ val intent = Intent()
+ intent.action = intentAction
+ startActivityAndWait(intent)
+ }
+ ) {
+ // Setting a gesture margin is important otherwise gesture nav is triggered.
+ targetComponent.setGestureMargin(device.displayWidth / 5)
+ for (i in 1..repeatCount) {
+ targetComponent.swipe(Direction.LEFT, 1.0f)
+ onSwipeFinished()
+ }
+ }
+}
\ No newline at end of file
diff --git a/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/RecyclerViewAsCarouselBenchmark.kt b/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/RecyclerViewAsCarouselBenchmark.kt
new file mode 100644
index 0000000..ac953f6
--- /dev/null
+++ b/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/RecyclerViewAsCarouselBenchmark.kt
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.integration.macrobenchmark
+
+import androidx.benchmark.macro.CompilationMode
+import androidx.benchmark.macro.junit4.MacrobenchmarkRule
+import androidx.test.filters.LargeTest
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.By
+import androidx.test.uiautomator.UiDevice
+import androidx.testutils.createCompilationParams
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@LargeTest
+@RunWith(Parameterized::class)
+class RecyclerViewAsCarouselBenchmark(
+ private val compilationMode: CompilationMode
+) {
+ @get:Rule
+ val benchmarkRule = MacrobenchmarkRule()
+ private lateinit var device: UiDevice
+
+ @Before
+ fun setUp() {
+ val instrumentation = InstrumentationRegistry.getInstrumentation()
+ device = UiDevice.getInstance(instrumentation)
+ }
+
+ @Test
+ fun scroll() {
+ val carousel = device.findObject(
+ By.res(
+ PackageName,
+ ResourceId
+ )
+ )
+ benchmarkRule.performRepeatedScroll(PackageName, compilationMode, Action, carousel) {
+ device.waitForIdle()
+ }
+ }
+
+ companion object {
+ private const val PackageName = "androidx.compose.integration.macrobenchmark.target"
+ private const val Action =
+ "androidx.compose.integration.macrobenchmark.target.RecyclerViewAsCarouselActivity"
+ private const val ResourceId = "carousel"
+
+ @Parameterized.Parameters(name = "compilation={0}")
+ @JvmStatic
+ fun parameters() = createCompilationParams()
+ }
+}
\ No newline at end of file
diff --git a/compose/material/OWNERS b/compose/material/OWNERS
index f6b40b2..8c2dd0a 100644
--- a/compose/material/OWNERS
+++ b/compose/material/OWNERS
@@ -7,3 +7,4 @@
lpf@google.com
soboleva@google.com
sgibly@google.com
+jossiwolf@google.com
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/BottomSheetScaffoldTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/BottomSheetScaffoldTest.kt
index 75ab9f3..72632ca 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/BottomSheetScaffoldTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/BottomSheetScaffoldTest.kt
@@ -488,4 +488,21 @@
Truth.assertThat(innerPadding.calculateBottomPadding()).isEqualTo(peekHeight)
}
}
+
+ /*
+ * This is a validity check for b/235588730. We can not verify actual placement behavior in this
+ * test as it would require child composables.
+ */
+ @Test
+ fun bottomSheetScaffold_emptySlots_doesNotCrash() {
+ rule.setMaterialContent {
+ BottomSheetScaffold(
+ sheetContent = { },
+ topBar = { },
+ snackbarHost = { },
+ floatingActionButton = { },
+ content = { }
+ )
+ }
+ }
}
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt
index 7ffe514..2f3f657 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt
@@ -46,6 +46,8 @@
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.Velocity
import androidx.compose.ui.unit.dp
+import androidx.compose.ui.util.fastForEach
+import androidx.compose.ui.util.fastMaxBy
import kotlin.math.roundToInt
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.launch
@@ -489,24 +491,28 @@
val layoutWidth = constraints.maxWidth
val layoutHeight = constraints.maxHeight
val looseConstraints = constraints.copy(minWidth = 0, minHeight = 0)
- val sheetPlaceable = subcompose(BottomSheetScaffoldLayoutSlot.Sheet) {
+
+ val sheetPlaceables = subcompose(BottomSheetScaffoldLayoutSlot.Sheet) {
bottomSheet(layoutHeight)
- }[0].measure(looseConstraints)
+ }.map { it.measure(looseConstraints) }
val sheetOffsetY = sheetOffset().roundToInt()
- val topBarPlaceable = topBar?.let {
- subcompose(BottomSheetScaffoldLayoutSlot.TopBar) { topBar() }[0]
- .measure(looseConstraints)
+
+ val topBarPlaceables = topBar?.let {
+ subcompose(BottomSheetScaffoldLayoutSlot.TopBar, topBar)
+ .map { it.measure(looseConstraints) }
}
- val topBarHeight = topBarPlaceable?.height ?: 0
+ val topBarHeight = topBarPlaceables?.fastMaxBy { it.height }?.height ?: 0
+
val bodyConstraints = looseConstraints.copy(maxHeight = layoutHeight - topBarHeight)
- val bodyPlaceable = subcompose(BottomSheetScaffoldLayoutSlot.Body) {
+ val bodyPlaceables = subcompose(BottomSheetScaffoldLayoutSlot.Body) {
body(PaddingValues(bottom = sheetPeekHeight))
- }[0].measure(bodyConstraints)
+ }.map { it.measure(bodyConstraints) }
+
val fabPlaceable = floatingActionButton?.let { fab ->
- subcompose(BottomSheetScaffoldLayoutSlot.Fab, fab)[0].measure(looseConstraints)
+ subcompose(BottomSheetScaffoldLayoutSlot.Fab, fab).map { it.measure(looseConstraints) }
}
- val fabWidth = fabPlaceable?.width ?: 0
- val fabHeight = fabPlaceable?.height ?: 0
+ val fabWidth = fabPlaceable?.fastMaxBy { it.width }?.width ?: 0
+ val fabHeight = fabPlaceable?.fastMaxBy { it.height }?.height ?: 0
val fabOffsetX = when (floatingActionButtonPosition) {
FabPosition.Center -> (layoutWidth - fabWidth) / 2
else -> layoutWidth - fabWidth - FabSpacing.roundToPx()
@@ -515,20 +521,23 @@
val fabOffsetY = if (sheetPeekHeight.toPx() < fabHeight / 2) {
sheetOffsetY - fabHeight - FabSpacing.roundToPx()
} else sheetOffsetY - (fabHeight / 2)
- val snackbarPlaceable = subcompose(BottomSheetScaffoldLayoutSlot.Snackbar, snackbarHost)[0]
- .measure(looseConstraints)
- val snackbarOffsetX = (layoutWidth - snackbarPlaceable.width) / 2
+
+ val snackbarPlaceables = subcompose(BottomSheetScaffoldLayoutSlot.Snackbar, snackbarHost)
+ .map { it.measure(looseConstraints) }
+ val snackbarWidth = snackbarPlaceables.fastMaxBy { it.width }?.width ?: 0
+ val snackbarHeight = snackbarPlaceables.fastMaxBy { it.height }?.height ?: 0
+ val snackbarOffsetX = (layoutWidth - snackbarWidth) / 2
val snackbarOffsetY = when (sheetState.currentValue) {
- Collapsed -> fabOffsetY - snackbarPlaceable.height
- Expanded -> layoutHeight - snackbarPlaceable.height
+ Collapsed -> fabOffsetY - snackbarHeight
+ Expanded -> layoutHeight - snackbarHeight
}
layout(layoutWidth, layoutHeight) {
// Placement order is important for elevation
- bodyPlaceable.placeRelative(0, topBarHeight)
- topBarPlaceable?.placeRelative(0, 0)
- sheetPlaceable.placeRelative(0, sheetOffsetY)
- fabPlaceable?.placeRelative(fabOffsetX, fabOffsetY)
- snackbarPlaceable.placeRelative(snackbarOffsetX, snackbarOffsetY)
+ bodyPlaceables.fastForEach { it.placeRelative(0, topBarHeight) }
+ topBarPlaceables?.fastForEach { it.placeRelative(0, 0) }
+ sheetPlaceables.fastForEach { it.placeRelative(0, sheetOffsetY) }
+ fabPlaceable?.fastForEach { it.placeRelative(fabOffsetX, fabOffsetY) }
+ snackbarPlaceables.fastForEach { it.placeRelative(snackbarOffsetX, snackbarOffsetY) }
}
}
}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
index 9998608..7df2c189 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
@@ -1673,10 +1673,31 @@
override fun endToMarker(marker: Int) {
if (marker < 0) {
+ // If the marker is negative then the marker is for the writer
val writerLocation = -marker
- while (writer.parent > writerLocation) end(false)
+ val writer = writer
+ while (true) {
+ val parent = writer.parent
+ if (parent <= writerLocation) break
+ end(writer.isNode(parent))
+ }
} else {
- while (reader.parent > marker) end(false)
+ // If the marker is positive then the marker is for the reader. However, if we are
+ // inserting then we need to close the inserting groups first.
+ if (inserting) {
+ // We might be inserting, we need to close all the groups until we are no longer
+ // inserting.
+ val writer = writer
+ while (inserting) {
+ end(writer.isNode(writer.parent))
+ }
+ }
+ val reader = reader
+ while (true) {
+ val parent = reader.parent
+ if (parent <= marker) break
+ end(reader.isNode(parent))
+ }
}
}
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionTests.kt b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionTests.kt
index 2916991..bcf5e0f 100644
--- a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionTests.kt
+++ b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionTests.kt
@@ -21,6 +21,7 @@
import androidx.compose.runtime.mock.ContactModel
import androidx.compose.runtime.mock.Edit
import androidx.compose.runtime.mock.EmptyApplier
+import androidx.compose.runtime.mock.InlineLinear
import androidx.compose.runtime.mock.Linear
import androidx.compose.runtime.mock.MockViewValidator
import androidx.compose.runtime.mock.Point
@@ -3390,6 +3391,199 @@
revalidate()
}
+ @Test // regression test for 264467571
+ fun test_returnConditionally_fromNodeLambda_local_initial_return() = compositionTest {
+ var condition by mutableStateOf(true)
+ compose {
+ Text("Before outer")
+ InlineLinear {
+ Text("Before inner")
+ InlineLinear inner@{
+ Text("Before return")
+ if (condition) return@inner
+ Text("After return")
+ }
+ Text("After inner")
+ }
+ Text("Before outer")
+ }
+
+ validate {
+ Text("Before outer")
+ InlineLinear {
+ Text("Before inner")
+ InlineLinear inner@{
+ Text("Before return")
+ if (condition) return@inner
+ Text("After return")
+ }
+ Text("After inner")
+ }
+ Text("Before outer")
+ }
+
+ repeat(4) {
+ condition = !condition
+ expectChanges()
+ revalidate()
+ }
+ }
+
+ @Test // regression test for 264467571
+ fun test_returnConditionally_fromNodeLambda_local_initial_no_return() = compositionTest {
+ var condition by mutableStateOf(true)
+ compose {
+ Text("Before outer")
+ InlineLinear {
+ Text("Before inner")
+ InlineLinear inner@{
+ Text("Before return")
+ if (condition) return@inner
+ Text("After return")
+ }
+ Text("After inner")
+ }
+ Text("Before outer")
+ }
+
+ validate {
+ Text("Before outer")
+ InlineLinear {
+ Text("Before inner")
+ InlineLinear inner@{
+ Text("Before return")
+ if (condition) return@inner
+ Text("After return")
+ }
+ Text("After inner")
+ }
+ Text("Before outer")
+ }
+
+ repeat(4) {
+ condition = !condition
+ expectChanges()
+ revalidate()
+ }
+ }
+
+ @Test // regression test for 264467571
+ fun test_returnConditionally_fromNodeLambda_nonLocal_initial_return() = compositionTest {
+ var condition by mutableStateOf(true)
+ compose {
+ Text("Before outer")
+ InlineLinear outer@{
+ Text("Before inner")
+ InlineLinear {
+ Text("Before return")
+ if (condition) return@outer
+ Text("After return")
+ }
+ Text("After inner")
+ }
+ Text("Before outer")
+ }
+
+ validate {
+ Text("Before outer")
+ InlineLinear outer@{
+ Text("Before inner")
+ InlineLinear {
+ Text("Before return")
+ if (condition) return@outer
+ Text("After return")
+ }
+ Text("After inner")
+ }
+ Text("Before outer")
+ }
+
+ repeat(4) {
+ condition = !condition
+ expectChanges()
+ revalidate()
+ }
+ }
+
+ @Test // regression test for 264467571
+ fun test_returnConditionally_fromNodeLambda_nonLocal_initial_no_return() = compositionTest {
+ var condition by mutableStateOf(true)
+ compose {
+ Text("Before outer")
+ InlineLinear outer@{
+ Text("Before inner")
+ InlineLinear {
+ Text("Before return")
+ if (condition) return@outer
+ Text("After return")
+ }
+ Text("After inner")
+ }
+ Text("Before outer")
+ }
+
+ validate {
+ Text("Before outer")
+ InlineLinear outer@{
+ Text("Before inner")
+ InlineLinear {
+ Text("Before return")
+ if (condition) return@outer
+ Text("After return")
+ }
+ Text("After inner")
+ }
+ Text("Before outer")
+ }
+
+ repeat(4) {
+ condition = !condition
+ expectChanges()
+ revalidate()
+ }
+ }
+
+ @Test
+ fun test_returnConditionally_fromConditionalNodeLambda_nonLocal_initial_no_return() =
+ compositionTest {
+ var condition by mutableStateOf(true)
+ compose {
+ Text("Before outer")
+ InlineLinear outer@{
+ Text("Before inner")
+ if (condition) {
+ InlineLinear {
+ Text("Before return")
+ return@outer
+ }
+ }
+ Text("After inner")
+ }
+ Text("Before outer")
+ }
+
+ validate {
+ Text("Before outer")
+ InlineLinear outer@{
+ Text("Before inner")
+ if (condition) {
+ InlineLinear {
+ Text("Before return")
+ return@outer
+ }
+ }
+ Text("After inner")
+ }
+ Text("Before outer")
+ }
+
+ repeat(4) {
+ condition = !condition
+ expectChanges()
+ revalidate()
+ }
+ }
+
@Test
fun test_returnConditionally_fromFunction_nonLocal() = compositionTest {
val text = mutableStateOf<String?>(null)
@@ -3411,6 +3605,45 @@
revalidate()
}
+ @Test // regression test for 274889428
+ fun test_returnConditionally_simulatedIf() = compositionTest {
+ val condition1 = mutableStateOf(true)
+ val condition2 = mutableStateOf(true)
+ val condition3 = mutableStateOf(true)
+
+ compose block@{
+ Text("A")
+ simulatedIf(condition1.value) { return@block }
+ Text("B")
+ simulatedIf(condition2.value) { return@block }
+ Text("C")
+ simulatedIf(condition3.value) { return@block }
+ Text("D")
+ }
+
+ validate block@{
+ Text("A")
+ this.simulatedIf(condition1.value) { return@block }
+ Text("B")
+ this.simulatedIf(condition2.value) { return@block }
+ Text("C")
+ this.simulatedIf(condition3.value) { return@block }
+ Text("D")
+ }
+
+ condition1.value = false
+ expectChanges()
+ revalidate()
+
+ condition2.value = false
+ expectChanges()
+ revalidate()
+
+ condition3.value = false
+ expectChanges()
+ revalidate()
+ }
+
@Test // regression test for 267586102
fun test_remember_in_a_loop() = compositionTest {
var i1 = 0
@@ -3694,4 +3927,13 @@
if (text == null) return
Text(text)
}
+}
+
+@Composable
+private inline fun simulatedIf(condition: Boolean, block: () -> Unit) {
+ if (condition) block()
+}
+
+private inline fun MockViewValidator.simulatedIf(condition: Boolean, block: () -> Unit) {
+ if (condition) block()
}
\ No newline at end of file
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/MockViewValidator.kt b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/MockViewValidator.kt
index 20ae087..cfa0614 100644
--- a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/MockViewValidator.kt
+++ b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/MockViewValidator.kt
@@ -47,6 +47,12 @@
assertEquals(0, views.size, "Not expecting children but some found")
}
}
+
+ inline fun inlineValidate(block: MockViewListValidator.() -> Unit) {
+ this.block()
+ val hasNext = next()
+ assertEquals(false, hasNext, "Expected children but none found")
+ }
}
fun MockViewValidator.view(name: String, block: (MockViewValidator.() -> Unit)? = null) {
@@ -56,6 +62,13 @@
MockViewListValidator(view.children).validate(block)
}
+inline fun MockViewValidator.inlineView(name: String, block: MockViewValidator.() -> Unit) {
+ val hasNext = next()
+ assertTrue(hasNext, "Expected a $name, but none found")
+ assertEquals(name, view.name)
+ MockViewListValidator(view.children).inlineValidate(block)
+}
+
fun <T> MockViewValidator.Repeated(of: Iterable<T>, block: MockViewValidator.(value: T) -> Unit) {
for (value in of) {
block(value)
@@ -64,6 +77,8 @@
fun MockViewValidator.Linear() = view("linear", null)
fun MockViewValidator.Linear(block: MockViewValidator.() -> Unit) = view("linear", block)
+inline fun MockViewValidator.InlineLinear(block: MockViewValidator.() -> Unit) =
+ inlineView("linear", block)
fun MockViewValidator.box(block: MockViewValidator.() -> Unit) = view("box", block)
fun MockViewValidator.Text(value: String) {
view("text")
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Views.kt b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Views.kt
index 1c332b0..a5617c9 100644
--- a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Views.kt
+++ b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Views.kt
@@ -48,6 +48,16 @@
}
@Composable
+inline fun InlineLinear(content: @Composable () -> Unit) {
+ ReusableComposeNode<View, ViewApplier>(
+ factory = { View().also { it.name = "linear" } },
+ update = { }
+ ) {
+ content()
+ }
+}
+
+@Composable
fun Linear(
onReuse: () -> Unit = {},
onDeactivate: () -> Unit = {},
diff --git a/coordinatorlayout/coordinatorlayout/src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java b/coordinatorlayout/coordinatorlayout/src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java
index 05a23875..70782d1 100644
--- a/coordinatorlayout/coordinatorlayout/src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java
+++ b/coordinatorlayout/coordinatorlayout/src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java
@@ -115,6 +115,8 @@
NestedScrollingParent3 {
static final String TAG = "CoordinatorLayout";
static final String WIDGET_PACKAGE_NAME;
+ // For the UP/DOWN keys, we scroll 1/10th of the screen.
+ private static final float KEY_SCROLL_FRACTION_AMOUNT = 0.1f;
static {
final Package pkg = CoordinatorLayout.class.getPackage();
@@ -181,6 +183,13 @@
// This only exist to prevent GC and object instantiation costs that are present before API 21.
private final int[] mNestedScrollingV2ConsumedCompat = new int[2];
+ // Array to be mutated by calls to nested scrolling related methods triggered by key events.
+ // Because these scrolling events rely on lower level methods using mBehaviorConsumed, we need
+ // a separate variable to save memory. As with the above, this only exist to prevent GC and
+ // object instantiation costs that are
+ // present before API 21.
+ private final int[] mKeyTriggeredScrollConsumed = new int[2];
+
private boolean mDisallowInterceptReset;
private boolean mIsAttachedToWindow;
@@ -1945,47 +1954,46 @@
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DPAD_UP:
- case KeyEvent.KEYCODE_DPAD_DOWN:
- case KeyEvent.KEYCODE_SPACE:
-
- int yScrollDelta;
-
- if (event.getKeyCode() == KeyEvent.KEYCODE_SPACE) {
- if (event.isShiftPressed()) {
- // Places the CoordinatorLayout at the top of the available
- // content.
- // Note: The delta may represent a value that would overshoot the
- // top of the screen, but the children only use as much of the
- // delta as they can support, so it will always go exactly to the
- // top.
- yScrollDelta = -getFullContentHeight();
- } else {
- // Places the CoordinatorLayout at the bottom of the available
- // content.
- yScrollDelta = getFullContentHeight() - getHeight();
- }
-
- } else if (event.isAltPressed()) { // For UP and DOWN KeyEvents
- // Full page scroll
- yScrollDelta = getHeight();
-
+ if (event.isAltPressed()) {
+ // Inverse to move up the screen
+ handled = moveVertically(-pageDelta());
} else {
- // Regular arrow scroll
- yScrollDelta = (int) (getHeight() * 0.1f);
+ // Inverse to move up the screen
+ handled = moveVertically(-lineDelta());
}
+ break;
- View focusedView = findDeepestFocusedChild(this);
-
- // Convert delta to negative if the key event is UP.
- if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP) {
- yScrollDelta = -yScrollDelta;
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ if (event.isAltPressed()) {
+ handled = moveVertically(pageDelta());
+ } else {
+ handled = moveVertically(lineDelta());
}
+ break;
- handled = manuallyTriggersNestedScrollFromKeyEvent(
- focusedView,
- yScrollDelta
- );
+ case KeyEvent.KEYCODE_PAGE_UP:
+ // Inverse to move up the screen
+ handled = moveVertically(-pageDelta());
+ break;
+ case KeyEvent.KEYCODE_PAGE_DOWN:
+ handled = moveVertically(pageDelta());
+ break;
+
+ case KeyEvent.KEYCODE_SPACE:
+ if (event.isShiftPressed()) {
+ handled = moveVertically(distanceToTop());
+ } else {
+ handled = moveVertically(distanceToBottom());
+ }
+ break;
+
+ case KeyEvent.KEYCODE_MOVE_HOME:
+ handled = moveVertically(distanceToTop());
+ break;
+
+ case KeyEvent.KEYCODE_MOVE_END:
+ handled = moveVertically(distanceToBottom());
break;
}
}
@@ -1994,6 +2002,36 @@
return handled;
}
+ // Distance for moving one arrow key tap.
+ private int lineDelta() {
+ return (int) (getHeight() * KEY_SCROLL_FRACTION_AMOUNT);
+ }
+
+ private int pageDelta() {
+ return getHeight();
+ }
+
+ private int distanceToTop() {
+ // Note: The delta may represent a value that would overshoot the
+ // top of the screen, but the children only use as much of the
+ // delta as they can support, so it will always go exactly to the
+ // top.
+ return -getFullContentHeight();
+ }
+
+ private int distanceToBottom() {
+ return getFullContentHeight() - getHeight();
+ }
+
+ private boolean moveVertically(int yScrollDelta) {
+ View focusedView = findDeepestFocusedChild(this);
+
+ return manuallyTriggersNestedScrollFromKeyEvent(
+ focusedView,
+ yScrollDelta
+ );
+ }
+
private View findDeepestFocusedChild(View startingParentView) {
View focusedView = startingParentView;
while (focusedView != null) {
@@ -2050,6 +2088,10 @@
ViewCompat.TYPE_NON_TOUCH
);
+ // Reset consumed values to zero.
+ mKeyTriggeredScrollConsumed[0] = 0;
+ mKeyTriggeredScrollConsumed[1] = 0;
+
onNestedScroll(
focusedView,
0,
@@ -2057,12 +2099,12 @@
0,
yScrollDelta,
ViewCompat.TYPE_NON_TOUCH,
- mBehaviorConsumed
+ mKeyTriggeredScrollConsumed
);
onStopNestedScroll(focusedView, ViewCompat.TYPE_NON_TOUCH);
- if (mBehaviorConsumed[1] > 0) {
+ if (mKeyTriggeredScrollConsumed[1] > 0) {
handled = true;
}
diff --git a/core/core-testing/api/current.txt b/core/core-testing/api/current.txt
new file mode 100644
index 0000000..bca6bb8
--- /dev/null
+++ b/core/core-testing/api/current.txt
@@ -0,0 +1,11 @@
+// Signature format: 4.0
+package androidx.core.testing.util {
+
+ public final class TestConsumer<T> implements androidx.core.util.Consumer<T> {
+ ctor public TestConsumer();
+ method public void accept(T? t);
+ method public void assertValues(java.util.List<? extends T> values);
+ }
+
+}
+
diff --git a/core/core-testing/api/public_plus_experimental_current.txt b/core/core-testing/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..bca6bb8
--- /dev/null
+++ b/core/core-testing/api/public_plus_experimental_current.txt
@@ -0,0 +1,11 @@
+// Signature format: 4.0
+package androidx.core.testing.util {
+
+ public final class TestConsumer<T> implements androidx.core.util.Consumer<T> {
+ ctor public TestConsumer();
+ method public void accept(T? t);
+ method public void assertValues(java.util.List<? extends T> values);
+ }
+
+}
+
diff --git a/core/core-testing/api/res-current.txt b/core/core-testing/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/core/core-testing/api/res-current.txt
diff --git a/core/core-testing/api/restricted_current.txt b/core/core-testing/api/restricted_current.txt
new file mode 100644
index 0000000..bca6bb8
--- /dev/null
+++ b/core/core-testing/api/restricted_current.txt
@@ -0,0 +1,11 @@
+// Signature format: 4.0
+package androidx.core.testing.util {
+
+ public final class TestConsumer<T> implements androidx.core.util.Consumer<T> {
+ ctor public TestConsumer();
+ method public void accept(T? t);
+ method public void assertValues(java.util.List<? extends T> values);
+ }
+
+}
+
diff --git a/core/core-testing/build.gradle b/core/core-testing/build.gradle
new file mode 100644
index 0000000..fdc6f76
--- /dev/null
+++ b/core/core-testing/build.gradle
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ */
+
+import androidx.build.LibraryType
+
+plugins {
+ id("AndroidXPlugin")
+ id("com.android.library")
+ id("org.jetbrains.kotlin.android")
+}
+
+dependencies {
+ // Atomically versioned.
+ constraints {
+ implementation(project(":core:core"))
+ }
+ api(libs.kotlinStdlib)
+ implementation("androidx.annotation:annotation-jvm:1.6.0")
+ api(project(":core:core"))
+
+ testImplementation(libs.testCore)
+ testImplementation(libs.testRunner)
+ testImplementation(libs.junit)
+}
+
+android {
+ namespace "androidx.core.testing"
+}
+
+androidx {
+ name = "androidx.core:core-testing"
+ type = LibraryType.PUBLISHED_LIBRARY
+ mavenVersion = LibraryVersions.CORE
+ inceptionYear = "2023"
+ description = "Write tests using core APIs."
+}
diff --git a/core/core-testing/src/main/java/androidx/core/testing/util/TestConsumer.kt b/core/core-testing/src/main/java/androidx/core/testing/util/TestConsumer.kt
new file mode 100644
index 0000000..14623df
--- /dev/null
+++ b/core/core-testing/src/main/java/androidx/core/testing/util/TestConsumer.kt
@@ -0,0 +1,59 @@
+/*
+ * 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.core.testing.util
+
+import androidx.annotation.GuardedBy
+import androidx.core.util.Consumer
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.concurrent.withLock
+
+/**
+ * An implementation of [Consumer] to capture values during a test and allows developers to perform
+ * assertions on the values.
+ * @param T the type of the input to the operation
+ */
+class TestConsumer<T> : Consumer<T> {
+
+ private val lock = ReentrantLock()
+
+ @GuardedBy("lock")
+ private val values = mutableListOf<T>()
+
+ /**
+ * Records the value in the order it was received.
+ * @param t the input argument.
+ */
+ override fun accept(t: T) {
+ lock.withLock {
+ values.add(t)
+ }
+ }
+
+ /**
+ * Asserts that the [values] match the received values. This method checks the order and the
+ * elements.
+ * @param values expected to be in the [TestConsumer]
+ * @throws AssertionError if the values do not match the current values.
+ */
+ fun assertValues(values: List<T>) {
+ lock.withLock {
+ if (this.values != values) {
+ throw AssertionError("Expected $values but received ${this.values}")
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/core-testing/src/test/java/androidx/core/testing/util/TestConsumerTest.kt b/core/core-testing/src/test/java/androidx/core/testing/util/TestConsumerTest.kt
new file mode 100644
index 0000000..48e0f9d
--- /dev/null
+++ b/core/core-testing/src/test/java/androidx/core/testing/util/TestConsumerTest.kt
@@ -0,0 +1,51 @@
+/*
+ * 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.core.testing.util
+
+import org.junit.Test
+
+class TestConsumerTest {
+
+ private val testConsumer = TestConsumer<Any>()
+
+ @Test
+ fun test_checkingValues_recordsValue() {
+ val values = listOf(Object(), Object(), Object())
+
+ values.forEach(testConsumer::accept)
+
+ testConsumer.assertValues(values)
+ }
+
+ @Test(expected = AssertionError::class)
+ fun test_checkingValues_checksSize() {
+ val values = listOf(Object(), Object(), Object())
+
+ values.forEach(testConsumer::accept)
+
+ testConsumer.assertValues(values.take(2))
+ }
+
+ @Test(expected = AssertionError::class)
+ fun test_checkingValues_checksOrder() {
+ val values = listOf(Object(), Object(), Object())
+
+ values.forEach(testConsumer::accept)
+
+ testConsumer.assertValues(values.reversed())
+ }
+}
\ No newline at end of file
diff --git a/core/core/build.gradle b/core/core/build.gradle
index d5fc97b..fa351a1 100644
--- a/core/core/build.gradle
+++ b/core/core/build.gradle
@@ -11,6 +11,7 @@
// Atomically versioned.
constraints {
implementation(project(":core:core-ktx"))
+ implementation(project(":core:core-testing"))
}
api("androidx.annotation:annotation:1.6.0")
diff --git a/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewWithCollapsingToolbarTest.java b/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewWithCollapsingToolbarTest.java
index 74a1306..2885cc3 100644
--- a/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewWithCollapsingToolbarTest.java
+++ b/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewWithCollapsingToolbarTest.java
@@ -28,6 +28,7 @@
import android.widget.LinearLayout;
import android.widget.TextView;
+import androidx.annotation.NonNull;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.MediumTest;
@@ -277,7 +278,229 @@
// Assert
// Should trigger a scroll event in parent. Note: OnStartNestedScroll is triggered on
// key action down only, not key action up, so that is why the count is one.
- // Should trigger in parent of scroll event.
+ assertEquals(1, mParentNestedScrollView.getOnStartNestedScrollCount());
+ // Should not trigger in child (because child doesn't have its own inner NestedScrollView).
+ assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
+ }
+
+ @Test
+ public void isOnStartNestedScrollCalled_keyboardPageDownInChild_calledInParent() {
+ // Arrange
+ setupNestedScrollViewInNestedScrollView(
+ ApplicationProvider.getApplicationContext(),
+ 100,
+ 600);
+
+ // Act
+ mChildNestedScrollView.requestFocus();
+ KeyEvent keyEventPressDown = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_PAGE_DOWN,
+ 0);
+ mChildNestedScrollView.executeKeyEvent(keyEventPressDown);
+
+ KeyEvent keyEventPressUp = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_UP,
+ KeyEvent.KEYCODE_PAGE_DOWN,
+ 0);
+ mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
+
+ // Assert
+ // Should trigger a scroll event in parent. Note: OnStartNestedScroll is triggered on
+ // key action down only, not key action up, so that is why the count is one.
+ assertEquals(1, mParentNestedScrollView.getOnStartNestedScrollCount());
+ // Should not trigger in child (because child doesn't have its own inner NestedScrollView).
+ assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
+ }
+
+ @Test
+ public void isOnStartNestedScrollCalled_keyboardPageUpInChild_calledInParent() {
+ // Arrange
+ setupNestedScrollViewInNestedScrollView(
+ ApplicationProvider.getApplicationContext(),
+ 100,
+ 600);
+
+ // Move to bottom of the child NestedScrollView, so we can scroll up and not go past child.
+ int scrollRange = mChildNestedScrollView.getScrollRange();
+ mChildNestedScrollView.scrollTo(0, scrollRange);
+
+ // Act
+ mChildNestedScrollView.requestFocus();
+ KeyEvent keyEventPressDown = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_PAGE_UP,
+ 0);
+ mChildNestedScrollView.executeKeyEvent(keyEventPressDown);
+
+ KeyEvent keyEventPressUp = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_UP,
+ KeyEvent.KEYCODE_PAGE_UP,
+ 0);
+ mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
+
+ // Assert
+ // Should trigger a scroll event in parent. Note: OnStartNestedScroll is triggered on
+ // key action down only, not key action up, so that is why the count is one.
+ assertEquals(1, mParentNestedScrollView.getOnStartNestedScrollCount());
+ // Should not trigger in child (because child doesn't have its own inner NestedScrollView).
+ assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
+ }
+
+ @Test
+ public void isOnStartNestedScrollCalled_keyboardMoveEndInChild_calledInParent() {
+ // Arrange
+ setupNestedScrollViewInNestedScrollView(
+ ApplicationProvider.getApplicationContext(),
+ 100,
+ 600);
+
+ // Act
+ mChildNestedScrollView.requestFocus();
+ KeyEvent keyEventPressDown = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_MOVE_END,
+ 0);
+ mChildNestedScrollView.executeKeyEvent(keyEventPressDown);
+
+ KeyEvent keyEventPressUp = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_UP,
+ KeyEvent.KEYCODE_MOVE_END,
+ 0);
+ mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
+
+ // Assert
+ // Should trigger a scroll event in parent. Note: OnStartNestedScroll is triggered on
+ // key action down only, not key action up, so that is why the count is one.
+ assertEquals(1, mParentNestedScrollView.getOnStartNestedScrollCount());
+ // Should not trigger in child (because child doesn't have its own inner NestedScrollView).
+ assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
+ }
+
+
+ @Test
+ public void isOnStartNestedScrollCalled_keyboardMoveHomeInChild_calledInParent() {
+ // Arrange
+ setupNestedScrollViewInNestedScrollView(
+ ApplicationProvider.getApplicationContext(),
+ 100,
+ 600);
+
+ // Move to bottom of the child NestedScrollView, so we can scroll up and not go past child.
+ int scrollRange = mChildNestedScrollView.getScrollRange();
+ mChildNestedScrollView.scrollTo(0, scrollRange);
+
+ // Act
+ mChildNestedScrollView.requestFocus();
+ KeyEvent keyEventPressDown = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_MOVE_HOME,
+ 0);
+ mChildNestedScrollView.executeKeyEvent(keyEventPressDown);
+
+ KeyEvent keyEventPressUp = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_UP,
+ KeyEvent.KEYCODE_MOVE_HOME,
+ 0);
+ mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
+
+ // Assert
+ // Should trigger a scroll event in parent. Note: OnStartNestedScroll is triggered on
+ // key action down only, not key action up, so that is why the count is one.
+ assertEquals(1, mParentNestedScrollView.getOnStartNestedScrollCount());
+ // Should not trigger in child (because child doesn't have its own inner NestedScrollView).
+ assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
+ }
+
+
+ @Test
+ public void isOnStartNestedScrollCalled_keyboardSpaceBarInChild_calledInParent() {
+ // Arrange
+ setupNestedScrollViewInNestedScrollView(
+ ApplicationProvider.getApplicationContext(),
+ 100,
+ 600);
+
+ // Act
+ mChildNestedScrollView.requestFocus();
+ KeyEvent keyEventPressDown = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_SPACE,
+ 0);
+ mChildNestedScrollView.executeKeyEvent(keyEventPressDown);
+
+ KeyEvent keyEventPressUp = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_UP,
+ KeyEvent.KEYCODE_SPACE,
+ 0);
+ mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
+
+ // Assert
+ // Should trigger a scroll event in parent. Note: OnStartNestedScroll is triggered on
+ // key action down only, not key action up, so that is why the count is one.
+ assertEquals(1, mParentNestedScrollView.getOnStartNestedScrollCount());
+ // Should not trigger in child (because child doesn't have its own inner NestedScrollView).
+ assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
+ }
+
+
+ @Test
+ public void isOnStartNestedScrollCalled_keyboardShiftSpaceBarInChild_calledInParent() {
+ // Arrange
+ setupNestedScrollViewInNestedScrollView(
+ ApplicationProvider.getApplicationContext(),
+ 100,
+ 600);
+
+ // Move to bottom of the child NestedScrollView, so we can scroll up and not go past child.
+ int scrollRange = mChildNestedScrollView.getScrollRange();
+ mChildNestedScrollView.scrollTo(0, scrollRange);
+
+ // Act
+ mChildNestedScrollView.requestFocus();
+ KeyEvent keyEventPressDown = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_SPACE,
+ 0,
+ KeyEvent.META_SHIFT_ON | KeyEvent.META_SHIFT_LEFT_ON
+ );
+ mChildNestedScrollView.executeKeyEvent(keyEventPressDown);
+
+ KeyEvent keyEventPressUp = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_UP,
+ KeyEvent.KEYCODE_SPACE,
+ 0,
+ KeyEvent.META_SHIFT_ON | KeyEvent.META_SHIFT_LEFT_ON
+ );
+ mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
+
+ // Assert
+ // Should trigger a scroll event in parent. Note: OnStartNestedScroll is triggered on
+ // key action down only, not key action up, so that is why the count is one.
assertEquals(1, mParentNestedScrollView.getOnStartNestedScrollCount());
// Should not trigger in child (because child doesn't have its own inner NestedScrollView).
assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
@@ -321,8 +544,6 @@
mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
// Assert
- // Should trigger in parent of scroll event. Note: OnStartNestedScroll is triggered on
- // key action down only, not key action up, so that is why the count is one.
assertEquals(0, mParentNestedScrollView.getOnStartNestedScrollCount());
// Should not trigger in child (because child doesn't have its own inner NestedScrollView).
assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
@@ -358,9 +579,6 @@
mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
// Assert
- // Should trigger in parent of scroll event. Note: OnStartNestedScroll is triggered on
- // key action down only, not key action up, so that is why the count is one.
- // Should trigger in parent of scroll event.
assertEquals(0, mParentNestedScrollView.getOnStartNestedScrollCount());
// Should not trigger in child (because child doesn't have its own inner NestedScrollView).
assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
@@ -397,9 +615,6 @@
mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
// Assert
- // Should trigger in parent of scroll event. Note: OnStartNestedScroll is triggered on
- // key action down only, not key action up, so that is why the count is one.
- // Should trigger in parent of scroll event.
assertEquals(0, mParentNestedScrollView.getOnStartNestedScrollCount());
// Should not trigger in child (because child doesn't have its own inner NestedScrollView).
assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
@@ -438,9 +653,77 @@
mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
// Assert
- // Should trigger in parent of scroll event. Note: OnStartNestedScroll is triggered on
- // key action down only, not key action up, so that is why the count is one.
- // Should trigger in parent of scroll event.
+ assertEquals(0, mParentNestedScrollView.getOnStartNestedScrollCount());
+ // Should not trigger in child (because child doesn't have its own inner NestedScrollView).
+ assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
+ }
+
+
+ @Test
+ public void isOnStartNestedScrollCalled_keyboardPageUpInChildPastTop_notCalledInParent() {
+ // Arrange
+ setupNestedScrollViewInNestedScrollView(
+ ApplicationProvider.getApplicationContext(),
+ 100,
+ 600);
+
+ // Act
+ mChildNestedScrollView.requestFocus();
+ KeyEvent keyEventPressPageDown = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_PAGE_UP,
+ 0
+ );
+ mChildNestedScrollView.executeKeyEvent(keyEventPressPageDown);
+
+ KeyEvent keyEventPressPageUp = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_UP,
+ KeyEvent.KEYCODE_PAGE_UP,
+ 0
+ );
+ mChildNestedScrollView.executeKeyEvent(keyEventPressPageUp);
+
+ // Assert
+ assertEquals(0, mParentNestedScrollView.getOnStartNestedScrollCount());
+ // Should not trigger in child (because child doesn't have its own inner NestedScrollView).
+ assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
+ }
+
+ @Test
+ public void isOnStartNestedScrollCalled_keyboardPageDownInChildPastBottom_notCalledInParent() {
+ // Arrange
+ setupNestedScrollViewInNestedScrollView(
+ ApplicationProvider.getApplicationContext(),
+ 100,
+ 600);
+ // Move to bottom of the child NestedScrollView, so we can try scrolling past it.
+ int scrollRange = mChildNestedScrollView.getScrollRange();
+ mChildNestedScrollView.scrollTo(0, scrollRange);
+
+ mChildNestedScrollView.requestFocus();
+ KeyEvent keyEventPressDown = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_PAGE_DOWN,
+ 0
+ );
+ mChildNestedScrollView.executeKeyEvent(keyEventPressDown);
+
+ KeyEvent keyEventPressUp = new KeyEvent(
+ 0,
+ 0,
+ KeyEvent.ACTION_UP,
+ KeyEvent.KEYCODE_PAGE_DOWN,
+ 0
+ );
+ mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
+
+ // Assert
assertEquals(0, mParentNestedScrollView.getOnStartNestedScrollCount());
// Should not trigger in child (because child doesn't have its own inner NestedScrollView).
assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
@@ -475,9 +758,6 @@
mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
// Assert
- // Should trigger in parent of scroll event. Note: OnStartNestedScroll is triggered on
- // key action down only, not key action up, so that is why the count is one.
- // Should trigger in parent of scroll event.
assertEquals(0, mParentNestedScrollView.getOnStartNestedScrollCount());
// Should not trigger in child (because child doesn't have its own inner NestedScrollView).
assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
@@ -513,9 +793,6 @@
mChildNestedScrollView.executeKeyEvent(keyEventPressUp);
// Assert
- // Should trigger in parent of scroll event. Note: OnStartNestedScroll is triggered on
- // key action down only, not key action up, so that is why the count is one.
- // Should trigger in parent of scroll event.
assertEquals(0, mParentNestedScrollView.getOnStartNestedScrollCount());
// Should not trigger in child (because child doesn't have its own inner NestedScrollView).
assertEquals(0, mChildNestedScrollView.getOnStartNestedScrollCount());
@@ -701,7 +978,12 @@
}
@Override
- public boolean onStartNestedScroll(View child, View target, int axes, int type) {
+ public boolean onStartNestedScroll(
+ @NonNull View child,
+ @NonNull View target,
+ int axes,
+ int type
+ ) {
mOnStartNestedScrollCount++;
return super.onStartNestedScroll(child, target, axes, type);
}
diff --git a/core/core/src/main/java/androidx/core/widget/NestedScrollView.java b/core/core/src/main/java/androidx/core/widget/NestedScrollView.java
index dd19e2d..2b0cdce 100644
--- a/core/core/src/main/java/androidx/core/widget/NestedScrollView.java
+++ b/core/core/src/main/java/androidx/core/widget/NestedScrollView.java
@@ -704,22 +704,34 @@
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DPAD_UP:
- if (!event.isAltPressed()) {
- handled = arrowScroll(View.FOCUS_UP);
- } else {
+ if (event.isAltPressed()) {
handled = fullScroll(View.FOCUS_UP);
+ } else {
+ handled = arrowScroll(View.FOCUS_UP);
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
- if (!event.isAltPressed()) {
- handled = arrowScroll(View.FOCUS_DOWN);
- } else {
+ if (event.isAltPressed()) {
handled = fullScroll(View.FOCUS_DOWN);
+ } else {
+ handled = arrowScroll(View.FOCUS_DOWN);
}
break;
+ case KeyEvent.KEYCODE_PAGE_UP:
+ handled = fullScroll(View.FOCUS_UP);
+ break;
+ case KeyEvent.KEYCODE_PAGE_DOWN:
+ handled = fullScroll(View.FOCUS_DOWN);
+ break;
case KeyEvent.KEYCODE_SPACE:
pageScroll(event.isShiftPressed() ? View.FOCUS_UP : View.FOCUS_DOWN);
break;
+ case KeyEvent.KEYCODE_MOVE_HOME:
+ pageScroll(View.FOCUS_UP);
+ break;
+ case KeyEvent.KEYCODE_MOVE_END:
+ pageScroll(View.FOCUS_DOWN);
+ break;
}
}
diff --git a/credentials/credentials-play-services-auth/build.gradle b/credentials/credentials-play-services-auth/build.gradle
index f2ecf59..7fd1e0e 100644
--- a/credentials/credentials-play-services-auth/build.gradle
+++ b/credentials/credentials-play-services-auth/build.gradle
@@ -26,7 +26,7 @@
api(libs.kotlinStdlib)
api project(":credentials:credentials")
- implementation("com.google.android.libraries.identity.googleid:googleid:0.0.2"){
+ implementation("com.google.android.libraries.identity.googleid:googleid:1.0.0"){
exclude group: "androidx.credentials"
}
diff --git a/credentials/credentials-play-services-auth/src/androidTest/java/androidx/credentials/playservices/beginsignin/CredentialProviderBeginSignInControllerJavaTest.java b/credentials/credentials-play-services-auth/src/androidTest/java/androidx/credentials/playservices/beginsignin/CredentialProviderBeginSignInControllerJavaTest.java
index 6689b7a..969f941 100644
--- a/credentials/credentials-play-services-auth/src/androidTest/java/androidx/credentials/playservices/beginsignin/CredentialProviderBeginSignInControllerJavaTest.java
+++ b/credentials/credentials-play-services-auth/src/androidTest/java/androidx/credentials/playservices/beginsignin/CredentialProviderBeginSignInControllerJavaTest.java
@@ -29,6 +29,7 @@
import androidx.test.filters.SmallTest;
import com.google.android.gms.auth.api.identity.BeginSignInRequest;
+import com.google.android.libraries.identity.googleid.GetGoogleIdOption;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -109,8 +110,6 @@
@Test
public void convertRequestToPlayServices_setGoogleIdOptionRequestAndTrueAutoSelect_success() {
- // TODO(b/270239625) fix pre u test cases for new GoogleIdOption signature
- /*
ActivityScenario<TestCredentialsActivity> activityScenario =
ActivityScenario.launch(TestCredentialsActivity.class);
@@ -119,7 +118,8 @@
.setNonce("nonce")
.setFilterByAuthorizedAccounts(true)
.setRequestVerifiedPhoneNumber(false)
- .associatedLinkedAccounts("link_service_id", List.of("a", "b", "c"))
+ .associateLinkedAccounts("link_service_id", List.of("a", "b", "c"))
+ .setAutoSelectEnabled(true)
.build();
activityScenario.onActivity(activity -> {
@@ -147,6 +147,5 @@
option.getIdTokenDepositionScopes());
});
- */
}
}
diff --git a/credentials/credentials-play-services-auth/src/androidTest/java/androidx/credentials/playservices/beginsignin/CredentialProviderBeginSignInControllerTest.kt b/credentials/credentials-play-services-auth/src/androidTest/java/androidx/credentials/playservices/beginsignin/CredentialProviderBeginSignInControllerTest.kt
index f9cfd2c..9652061 100644
--- a/credentials/credentials-play-services-auth/src/androidTest/java/androidx/credentials/playservices/beginsignin/CredentialProviderBeginSignInControllerTest.kt
+++ b/credentials/credentials-play-services-auth/src/androidTest/java/androidx/credentials/playservices/beginsignin/CredentialProviderBeginSignInControllerTest.kt
@@ -28,6 +28,7 @@
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
+import com.google.android.libraries.identity.googleid.GetGoogleIdOption
@RunWith(AndroidJUnit4::class)
@SmallTest
@@ -78,8 +79,6 @@
@Test
fun convertRequestToPlayServices_setGoogleIdOptionRequest_success() {
- // TODO(b/270239625) fix pre u test cases for new GoogleIdOption signature
- /*
val activityScenario = ActivityScenario.launch(
TestCredentialsActivity::class.java
)
@@ -89,7 +88,8 @@
.setNonce("nonce")
.setFilterByAuthorizedAccounts(true)
.setRequestVerifiedPhoneNumber(false)
- .associatedLinkedAccounts("link_service_id", listOf("a", "b", "c"))
+ .associateLinkedAccounts("link_service_id", listOf("a", "b", "c"))
+ .setAutoSelectEnabled(true)
.build()
activityScenario.onActivity { activity: TestCredentialsActivity? ->
@@ -116,6 +116,5 @@
assertThat(actualOption.idTokenDepositionScopes)
.isEqualTo(option.idTokenDepositionScopes)
}
- */
}
}
\ No newline at end of file
diff --git a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/BeginSignIn/BeginSignInControllerUtility.kt b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/BeginSignIn/BeginSignInControllerUtility.kt
index e3e7c4f..b6416f5 100644
--- a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/BeginSignIn/BeginSignInControllerUtility.kt
+++ b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/BeginSignIn/BeginSignInControllerUtility.kt
@@ -72,8 +72,7 @@
} else if (option is GetGoogleIdOption) {
requestBuilder.setGoogleIdTokenRequestOptions(
convertToGoogleIdTokenOption(option))
- // TODO(b/270239625) add this bit to GID
- // autoSelect = autoSelect || option.isAutoSelectEnabled
+ autoSelect = autoSelect || option.autoSelectEnabled
}
}
return requestBuilder
diff --git a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/BeginSignIn/CredentialProviderBeginSignInController.kt b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/BeginSignIn/CredentialProviderBeginSignInController.kt
index e1ca866..7b6ac57 100644
--- a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/BeginSignIn/CredentialProviderBeginSignInController.kt
+++ b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/BeginSignIn/CredentialProviderBeginSignInController.kt
@@ -228,7 +228,7 @@
}
if (response.profilePictureUri != null) {
- cred.setProfilePictureUri(response.profilePictureUri.toString())
+ cred.setProfilePictureUri(response.profilePictureUri)
}
return cred.build()
diff --git a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt
index 5612ced..386a01a 100644
--- a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt
+++ b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt
@@ -29,6 +29,7 @@
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.completeWith
import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.conflate
import kotlinx.coroutines.flow.dropWhile
import kotlinx.coroutines.flow.emitAll
import kotlinx.coroutines.flow.flow
@@ -76,14 +77,15 @@
* Final. ReadException can transition to another ReadException, Data or Final.
* Data can transition to another Data or Final. Final will not change.
*/
- val latestVersionAtRead = coordinator.getVersion()
- val currentDownStreamFlowState = inMemoryCache.currentState
-
- if ((currentDownStreamFlowState !is Data) ||
- (currentDownStreamFlowState.version < latestVersionAtRead)
- ) {
- // We need to send a read request because we don't have data yet / cached data is stale.
- readActor.offer(Message.Read(currentDownStreamFlowState))
+ // the first read should not be blocked by ongoing writes, so it can be dirty read. If it is
+ // a unlocked read, the same value might be emitted to the flow again
+ val startState = readState(requireLock = false)
+ when (startState) {
+ is Data<T> -> emit(startState.value)
+ is UnInitialized -> error(BUG_MESSAGE)
+ is ReadException<T> -> throw startState.readException
+ // TODO(b/273990827): decide the contract of accessing when state is Final
+ is Final -> return@flow
}
emitAll(
@@ -91,16 +93,7 @@
// end the flow if we reach the final value
it !is Final
}.dropWhile {
- if (currentDownStreamFlowState is Data<T> && it is Data) {
- // we need to drop until initTasks are completed and set to null, and data
- // version >= the current version when entering flow
- it.version < latestVersionAtRead
- } else {
- // we need to drop the last seen state since it was either an exception or
- // wasn't yet initialized. Since we sent a message to actor, we *will* see a
- // new value.
- it === currentDownStreamFlowState
- }
+ it is Data && it.version <= startState.version
}.map {
when (it) {
is ReadException<T> -> throw it.readException
@@ -125,6 +118,7 @@
return ack.await()
}
+ // cache is only set by the reads who have file lock, so cache always has stable data
private val inMemoryCache = DataStoreInMemoryCache<T>()
private val readAndInit = InitDataStore(initTasksList)
@@ -141,6 +135,11 @@
private val writeActor = SimpleActor<Message.Update<T>>(
scope = scope,
onComplete = {
+ // TODO(b/267792241): remove it if updateCollector is better scoped
+ // no more reads so stop listening to file changes
+ if (::updateCollector.isInitialized) {
+ updateCollector.cancel()
+ }
it?.let {
inMemoryCache.tryUpdate(Final(it))
}
@@ -160,32 +159,25 @@
handleUpdate(msg)
}
- private val readActor = SimpleActor<Message.Read<T>>(
- scope = scope,
- onComplete = {
- // TODO(b/267792241): remove it if updateCollector is better scoped
- // no more reads so stop listening to file changes
- if (::updateCollector.isInitialized) {
- updateCollector.cancel()
+ private suspend fun readState(requireLock: Boolean): State<T> =
+ withContext(scope.coroutineContext) {
+ if (inMemoryCache.currentState is Final) {
+ // if state is Final, just return it
+ inMemoryCache.currentState
+ } else {
+ try {
+ // make sure we initialize properly before reading from file.
+ readAndInitOrPropagateAndThrowFailure()
+ } catch (throwable: Throwable) {
+ // init or read failed, it is already updated in the cached value
+ // so we don't need to do anything.
+ return@withContext ReadException(throwable, -1)
+ }
+ // after init, try to read again. If the init run for this block, it won't re-read
+ // the file and use cache, so this is an OK call to make wrt performance.
+ readDataAndUpdateCache(requireLock)
}
- },
- onUndeliveredElement = { _, _ -> }
- ) {
- handleRead()
- }
-
- private suspend fun handleRead() {
- try {
- // make sure we initialize properly before reading from file.
- readAndInitOrPropagateAndThrowFailure()
- // after init, try to read again. If the init run for this block, it won't
- // re-read the file and use cache, so this is an OK call to make wrt performance.
- readDataAndUpdateCache()
- } catch (throwable: Throwable) {
- // init or read failed, it is already updated in the cached value
- // so we don't need to do anything.
}
- }
private suspend fun handleUpdate(update: Message.Update<T>) {
update.ack.completeWith(
@@ -231,41 +223,64 @@
}
/**
- * Reads the file and updates the cache unless current cached value is Data and
- * its version is equal to the latest version.
+ * Reads the file and updates the cache unless current cached value is Data and its version is
+ * equal to the latest version, or it is unable to get lock.
*
- * Calling this method when state is UnInitialized is a bug and this method
- * will throw if that happens.
+ * Calling this method when state is UnInitialized is a bug and this method will throw if that
+ * happens.
*/
- private suspend fun readDataAndUpdateCache() {
+ private suspend fun readDataAndUpdateCache(requireLock: Boolean): State<T> {
// Check if the cached version matches with shared memory counter
val currentState = inMemoryCache.currentState
// should not call this without initialization first running
check(currentState !is UnInitialized) {
BUG_MESSAGE
}
- val version = coordinator.getVersion()
+ val latestVersion = coordinator.getVersion()
val cachedVersion = if (currentState is Data) currentState.version else -1
// Return cached value if cached version is latest
- if (currentState is Data && version == cachedVersion) {
- return
+ if (currentState is Data && latestVersion == cachedVersion) {
+ return currentState
}
- val data = try {
- coordinator.tryLock { locked ->
- val result = readDataFromFileOrDefault()
- Data(
- result,
- result.hashCode(),
- // use the latest version if we have the lock. Otherwise, use the
- // previous version that we read before entering the tryLock
- if (locked) coordinator.getVersion() else version
- )
+ val (newState, acquiredLock) =
+ if (requireLock) {
+ coordinator.lock { attemptRead(acquiredLock = true) to true }
+ } else {
+ coordinator.tryLock { locked ->
+ attemptRead(locked) to locked
+ }
}
- } catch (throwable: Throwable) {
- ReadException(throwable, version)
+ if (acquiredLock) {
+ inMemoryCache.tryUpdate(newState)
}
- inMemoryCache.tryUpdate(data)
+ return newState
+ }
+
+ /**
+ * Caller is responsible to lock or tryLock, and pass the [acquiredLock] parameter to indicate
+ * if it has acquired lock.
+ */
+ private suspend fun attemptRead(acquiredLock: Boolean): State<T> {
+ // read version before file
+ val currentVersion = coordinator.getVersion()
+ // use current version if it has lock, otherwise use the older version between current and
+ // cached version, which guarantees correctness
+ val readVersion = if (acquiredLock) {
+ currentVersion
+ } else {
+ inMemoryCache.currentState.version
+ }
+ val readResult = runCatching { readDataFromFileOrDefault() }
+ return if (readResult.isSuccess) {
+ Data(
+ readResult.getOrThrow(),
+ readResult.getOrThrow().hashCode(),
+ readVersion
+ )
+ } else {
+ ReadException<T>(readResult.exceptionOrNull()!!, readVersion)
+ }
}
// Caller is responsible for (try to) getting file lock. It reads from the file directly without
@@ -298,8 +313,11 @@
// The code in `writeScope` is run synchronously, i.e. the newVersion isn't returned until
// the code in `writeScope` completes.
storageConnection.writeScope {
- writeData(newData)
+ // update version before write to file to avoid the case where if update version after
+ // file write, the process can crash after file write but before version increment, so
+ // the readers might skip reading forever because the version isn't changed
newVersion = coordinator.incrementAndGetVersion()
+ writeData(newData)
if (updateCache) {
inMemoryCache.tryUpdate(Data(newData, newData.hashCode(), newVersion))
}
@@ -363,10 +381,11 @@
inMemoryCache.tryUpdate(initData)
if (!::updateCollector.isInitialized) {
updateCollector = scope.launch {
- coordinator.updateNotifications.collect {
+ coordinator.updateNotifications.conflate().collect {
val currentState = inMemoryCache.currentState
if (currentState !is Final) {
- readActor.offer(Message.Read(currentState))
+ // update triggered reads should always wait for lock
+ readDataAndUpdateCache(requireLock = true)
}
}
}
diff --git a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStoreInMemoryCache.kt b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStoreInMemoryCache.kt
index 29f0c14..0fe02e1 100644
--- a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStoreInMemoryCache.kt
+++ b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStoreInMemoryCache.kt
@@ -56,17 +56,10 @@
// if version changed, and it will arrive here as either new data or
// new error with its new version.
//
- // The only other case that might happen is when a read happens in
- // parallel to a write.
- // In that case, read either has:
- // old version, old data
- // old version, new data
- // new version, new data
- // Since the write will send (new version, new data); it is OK to ignore
- // what read sent if it has old version (or ignore what write sent
- // if read already sent (new version, new data).
- // The key constraint here is that, we will never receive
- // (new version, old data) as version updates happen after data is written.
+ // If a read happens in parallel to a write ("dirty read"), we will not update
+ // the cache here but make it local in the flow that does the dirty read. In
+ // this cache we guarantee the version matches with the data because only reads
+ // that have file lock can set the cache.
if (newState.version > cached.version) {
newState
} else {
diff --git a/datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/SingleProcessDataStoreTest.kt b/datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/SingleProcessDataStoreTest.kt
index 79c682d..454ed64 100644
--- a/datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/SingleProcessDataStoreTest.kt
+++ b/datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/SingleProcessDataStoreTest.kt
@@ -912,6 +912,22 @@
assertThat(asyncCollector.await()).containsExactly(2.toByte(), 3.toByte()).inOrder()
}
+ @Test
+ fun testCancelledDataStoreScopeCantRead() = doTest {
+ // TODO(b/273990827): decide the contract of accessing when state is Final
+ dataStoreScope.cancel()
+
+ val flowCollector = async {
+ store.data.toList()
+ }
+ runCurrent()
+ assertThrows<CancellationException> { flowCollector.await() }
+
+ assertThrows<CancellationException> {
+ store.data.first()
+ }
+ }
+
private class TestingCorruptionHandler(
private val replaceWith: Byte? = null
) : CorruptionHandler<Byte> {
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index dceb753..fe0253b 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -128,6 +128,7 @@
docs(project(":core:core-remoteviews"))
docs(project(":core:core-splashscreen"))
docs(project(":core:core-role"))
+ docs(project(":core:core-testing"))
docs(project(":core:uwb:uwb"))
docs(project(":core:uwb:uwb-rxjava3"))
docs(project(":credentials:credentials"))
diff --git a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/GlanceTileServiceTest.kt b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/GlanceTileServiceTest.kt
index 6be7404..6959421 100644
--- a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/GlanceTileServiceTest.kt
+++ b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/GlanceTileServiceTest.kt
@@ -41,6 +41,7 @@
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.guava.await
import kotlinx.coroutines.runBlocking
@@ -92,10 +93,11 @@
)
executor = InlineExecutorService()
- tileServiceWithState = TestGlanceTileServiceWithState()
+ tileServiceWithState = TestGlanceTileServiceWithState(fakeCoroutineScope)
tileServiceClientWithState = TestTileClient(
tileServiceWithState,
- executor
+ fakeCoroutineScope,
+ fakeCoroutineScope.coroutineContext[CoroutineDispatcher]!!
)
ovalBitmap =
@@ -248,7 +250,9 @@
val tileRequest = RequestBuilders.TileRequest.Builder().build()
val tileFuture = tileServiceClientWithState.requestTile(tileRequest)
+
shadowOf(Looper.getMainLooper()).idle()
+
val tile = tileFuture.await()
assertThat(tile.timeline!!.timelineEntries).hasSize(1)
@@ -319,6 +323,7 @@
testTimelineMode.timeIntervals.elementAt(0) -> {
Text("No event")
}
+
testTimelineMode.timeIntervals.elementAt(1) -> {
Text("Coffee")
Image(
@@ -328,6 +333,7 @@
contentScale = ContentScale.FillBounds
)
}
+
testTimelineMode.timeIntervals.elementAt(2) -> {
Text("Work")
Image(
@@ -336,6 +342,7 @@
modifier = GlanceModifier.size(40.dp),
)
}
+
testTimelineMode.timeIntervals.elementAt(3) -> {
Text("Dinner")
}
@@ -343,8 +350,14 @@
}
}
- private inner class TestGlanceTileServiceWithState : GlanceTileService() {
+ private inner class TestGlanceTileServiceWithState(scope: CoroutineScope) :
+ GlanceTileService() {
override val stateDefinition = PreferencesGlanceStateDefinition
+
+ init {
+ stateDefinition.setCoroutineScope(scope)
+ }
+
val prefsNameKey = stringPreferencesKey("user_name")
@Composable
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/state/GlanceStateDefinition.kt b/glance/glance/src/androidMain/kotlin/androidx/glance/state/GlanceStateDefinition.kt
index 9b7d161..59fb9fb 100644
--- a/glance/glance/src/androidMain/kotlin/androidx/glance/state/GlanceStateDefinition.kt
+++ b/glance/glance/src/androidMain/kotlin/androidx/glance/state/GlanceStateDefinition.kt
@@ -23,6 +23,7 @@
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.preferencesDataStoreFile
import java.io.File
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
@@ -151,12 +152,26 @@
}
/**
- * Base class helping the creation of a state using DataStore's [Preferences].
+ * Base class helping the creation of a state using DataStore's [Preferences] with an optional
+ * CoroutineScope for [DataStore].
*/
object PreferencesGlanceStateDefinition : GlanceStateDefinition<Preferences> {
+ private var coroutineScope: CoroutineScope? = null
override fun getLocation(context: Context, fileKey: String): File =
context.preferencesDataStoreFile(fileKey)
- override suspend fun getDataStore(context: Context, fileKey: String): DataStore<Preferences> =
- PreferenceDataStoreFactory.create { context.preferencesDataStoreFile(fileKey) }
+ override suspend fun getDataStore(context: Context, fileKey: String): DataStore<Preferences> {
+ return coroutineScope?.let {
+ PreferenceDataStoreFactory.create(scope = it) {
+ context.preferencesDataStoreFile(
+ fileKey
+ )
+ }
+ } ?: PreferenceDataStoreFactory.create { context.preferencesDataStoreFile(fileKey) }
+ }
+
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ fun setCoroutineScope(scope: CoroutineScope) {
+ coroutineScope = scope
+ }
}
diff --git a/gradle.properties b/gradle.properties
index a26afbf..69496b3 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -25,9 +25,12 @@
android.experimental.lint.missingBaselineIsEmptyBaseline=true
android.experimental.lint.version = 8.1.0-alpha07
-# Don't generate versioned API files
+# Generate versioned API files
androidx.writeVersionedApiFiles=true
+# Run the CheckAarMetadata task
+androidx.checkAarMetadata=true
+
# Do restrict compileSdkPreview usage
androidx.allowCustomCompileSdk=false
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 2843f37..26dab29 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -491,6 +491,14 @@
<sha256 value="100a2c6db1ec4aab9545ead93be094c9728ecc671fba8353648d04ef405f30c8" origin="Generated by Gradle" reason="Artifact is not signed"/>
</artifact>
</component>
+ <component group="com.google.android.libraries.identity.googleid" name="googleid" version="1.0.0">
+ <artifact name="googleid-1.0.0.aar">
+ <sha256 value="7c6c910a751e32951afafd79be22f9d5222229ec59a92961515a8b0b6f8ecdcb" origin="Generated by Gradle" reason="Artifact is not signed"/>
+ </artifact>
+ <artifact name="googleid-1.0.0.pom">
+ <sha256 value="663aed69db1623331032fe4dedee4f2b1c9decbdad0ab06a4fc0be14b3e52c7f" origin="Generated by Gradle" reason="Artifact is not signed"/>
+ </artifact>
+ </component>
<component group="com.google.android.odml" name="image" version="1.0.0-beta1">
<artifact name="image-1.0.0-beta1.aar">
<sha256 value="2e71aa31f83a9415277f119de67195726f07d1760e9542c111778c320e3aa1f2" origin="Generated by Gradle" reason="Artifact is not signed"/>
diff --git a/health/health-services-client/api/1.0.0-beta03.txt b/health/health-services-client/api/1.0.0-beta03.txt
index 9d0902d..d32c831 100644
--- a/health/health-services-client/api/1.0.0-beta03.txt
+++ b/health/health-services-client/api/1.0.0-beta03.txt
@@ -30,6 +30,7 @@
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? getCurrentExerciseInfo(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super androidx.health.services.client.data.ExerciseInfo>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? markLap(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? overrideAutoPauseAndResumeForActiveExercise(androidx.health.services.client.ExerciseClient, boolean enabled, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
+ method public static suspend Object? overrideBatchingModesForActiveExercise(androidx.health.services.client.ExerciseClient, java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModes, kotlin.coroutines.Continuation<? super java.lang.Void>);
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? pauseExercise(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? prepareExercise(androidx.health.services.client.ExerciseClient, androidx.health.services.client.data.WarmUpConfig configuration, kotlin.coroutines.Continuation<? super kotlin.Unit>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? removeGoalFromActiveExercise(androidx.health.services.client.ExerciseClient, androidx.health.services.client.data.ExerciseGoal<?> exerciseGoal, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
diff --git a/health/health-services-client/api/current.txt b/health/health-services-client/api/current.txt
index 9d0902d..d32c831 100644
--- a/health/health-services-client/api/current.txt
+++ b/health/health-services-client/api/current.txt
@@ -30,6 +30,7 @@
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? getCurrentExerciseInfo(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super androidx.health.services.client.data.ExerciseInfo>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? markLap(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? overrideAutoPauseAndResumeForActiveExercise(androidx.health.services.client.ExerciseClient, boolean enabled, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
+ method public static suspend Object? overrideBatchingModesForActiveExercise(androidx.health.services.client.ExerciseClient, java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModes, kotlin.coroutines.Continuation<? super java.lang.Void>);
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? pauseExercise(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? prepareExercise(androidx.health.services.client.ExerciseClient, androidx.health.services.client.data.WarmUpConfig configuration, kotlin.coroutines.Continuation<? super kotlin.Unit>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? removeGoalFromActiveExercise(androidx.health.services.client.ExerciseClient, androidx.health.services.client.data.ExerciseGoal<?> exerciseGoal, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
diff --git a/health/health-services-client/api/public_plus_experimental_1.0.0-beta03.txt b/health/health-services-client/api/public_plus_experimental_1.0.0-beta03.txt
index 9d0902d..d32c831 100644
--- a/health/health-services-client/api/public_plus_experimental_1.0.0-beta03.txt
+++ b/health/health-services-client/api/public_plus_experimental_1.0.0-beta03.txt
@@ -30,6 +30,7 @@
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? getCurrentExerciseInfo(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super androidx.health.services.client.data.ExerciseInfo>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? markLap(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? overrideAutoPauseAndResumeForActiveExercise(androidx.health.services.client.ExerciseClient, boolean enabled, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
+ method public static suspend Object? overrideBatchingModesForActiveExercise(androidx.health.services.client.ExerciseClient, java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModes, kotlin.coroutines.Continuation<? super java.lang.Void>);
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? pauseExercise(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? prepareExercise(androidx.health.services.client.ExerciseClient, androidx.health.services.client.data.WarmUpConfig configuration, kotlin.coroutines.Continuation<? super kotlin.Unit>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? removeGoalFromActiveExercise(androidx.health.services.client.ExerciseClient, androidx.health.services.client.data.ExerciseGoal<?> exerciseGoal, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
diff --git a/health/health-services-client/api/public_plus_experimental_current.txt b/health/health-services-client/api/public_plus_experimental_current.txt
index 9d0902d..d32c831 100644
--- a/health/health-services-client/api/public_plus_experimental_current.txt
+++ b/health/health-services-client/api/public_plus_experimental_current.txt
@@ -30,6 +30,7 @@
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? getCurrentExerciseInfo(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super androidx.health.services.client.data.ExerciseInfo>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? markLap(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? overrideAutoPauseAndResumeForActiveExercise(androidx.health.services.client.ExerciseClient, boolean enabled, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
+ method public static suspend Object? overrideBatchingModesForActiveExercise(androidx.health.services.client.ExerciseClient, java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModes, kotlin.coroutines.Continuation<? super java.lang.Void>);
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? pauseExercise(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? prepareExercise(androidx.health.services.client.ExerciseClient, androidx.health.services.client.data.WarmUpConfig configuration, kotlin.coroutines.Continuation<? super kotlin.Unit>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? removeGoalFromActiveExercise(androidx.health.services.client.ExerciseClient, androidx.health.services.client.data.ExerciseGoal<?> exerciseGoal, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
diff --git a/health/health-services-client/api/restricted_1.0.0-beta03.txt b/health/health-services-client/api/restricted_1.0.0-beta03.txt
index 9d0902d..d32c831 100644
--- a/health/health-services-client/api/restricted_1.0.0-beta03.txt
+++ b/health/health-services-client/api/restricted_1.0.0-beta03.txt
@@ -30,6 +30,7 @@
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? getCurrentExerciseInfo(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super androidx.health.services.client.data.ExerciseInfo>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? markLap(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? overrideAutoPauseAndResumeForActiveExercise(androidx.health.services.client.ExerciseClient, boolean enabled, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
+ method public static suspend Object? overrideBatchingModesForActiveExercise(androidx.health.services.client.ExerciseClient, java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModes, kotlin.coroutines.Continuation<? super java.lang.Void>);
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? pauseExercise(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? prepareExercise(androidx.health.services.client.ExerciseClient, androidx.health.services.client.data.WarmUpConfig configuration, kotlin.coroutines.Continuation<? super kotlin.Unit>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? removeGoalFromActiveExercise(androidx.health.services.client.ExerciseClient, androidx.health.services.client.data.ExerciseGoal<?> exerciseGoal, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
diff --git a/health/health-services-client/api/restricted_current.txt b/health/health-services-client/api/restricted_current.txt
index 9d0902d..d32c831 100644
--- a/health/health-services-client/api/restricted_current.txt
+++ b/health/health-services-client/api/restricted_current.txt
@@ -30,6 +30,7 @@
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? getCurrentExerciseInfo(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super androidx.health.services.client.data.ExerciseInfo>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? markLap(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? overrideAutoPauseAndResumeForActiveExercise(androidx.health.services.client.ExerciseClient, boolean enabled, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
+ method public static suspend Object? overrideBatchingModesForActiveExercise(androidx.health.services.client.ExerciseClient, java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModes, kotlin.coroutines.Continuation<? super java.lang.Void>);
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? pauseExercise(androidx.health.services.client.ExerciseClient, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? prepareExercise(androidx.health.services.client.ExerciseClient, androidx.health.services.client.data.WarmUpConfig configuration, kotlin.coroutines.Continuation<? super kotlin.Unit>) throws androidx.health.services.client.HealthServicesException;
method @kotlin.jvm.Throws(exceptionClasses=HealthServicesException::class) public static suspend Object? removeGoalFromActiveExercise(androidx.health.services.client.ExerciseClient, androidx.health.services.client.data.ExerciseGoal<?> exerciseGoal, kotlin.coroutines.Continuation<? super java.lang.Void>) throws androidx.health.services.client.HealthServicesException;
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/ExerciseClientExtension.kt b/health/health-services-client/src/main/java/androidx/health/services/client/ExerciseClientExtension.kt
index a11595b..cafecba 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/ExerciseClientExtension.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/ExerciseClientExtension.kt
@@ -15,6 +15,7 @@
*/
package androidx.health.services.client
+import androidx.health.services.client.data.BatchingMode
import androidx.health.services.client.data.DataPoint
import androidx.health.services.client.data.DataType
import androidx.health.services.client.data.ExerciseCapabilities
@@ -239,6 +240,18 @@
) = overrideAutoPauseAndResumeForActiveExerciseAsync(enabled).awaitWithException()
/**
+ * Sets the batching mode for the current exercise synchronously.
+ *
+ * @param batchingModes [BatchingMode] overrides for exercise updates. Passing an empty set will
+ * clear all existing overrides.
+ * @throws HealthServicesException if an exercise is not active for this app or Health Service fails
+ * to process the call
+ */
+public suspend fun ExerciseClient.overrideBatchingModesForActiveExercise(
+ batchingModes: Set<BatchingMode>
+) = overrideBatchingModesForActiveExerciseAsync(batchingModes).awaitWithException()
+
+/**
* Returns the [ExerciseCapabilities] of this client for the device.
*
* This can be used to determine what [ExerciseType]s and [DataType]s this device supports.
@@ -264,4 +277,4 @@
@kotlin.jvm.Throws(HealthServicesException::class)
public suspend fun ExerciseClient.updateExerciseTypeConfig(
exerciseTypeConfig: ExerciseTypeConfig
-) = updateExerciseTypeConfigAsync(exerciseTypeConfig).awaitWithException()
\ No newline at end of file
+) = updateExerciseTypeConfigAsync(exerciseTypeConfig).awaitWithException()
diff --git a/health/health-services-client/src/test/java/androidx/health/services/client/ExerciseClientTest.kt b/health/health-services-client/src/test/java/androidx/health/services/client/ExerciseClientTest.kt
index fb50f7c..f463bc8 100644
--- a/health/health-services-client/src/test/java/androidx/health/services/client/ExerciseClientTest.kt
+++ b/health/health-services-client/src/test/java/androidx/health/services/client/ExerciseClientTest.kt
@@ -22,6 +22,7 @@
import android.os.Looper
import android.os.RemoteException
import androidx.health.services.client.data.Availability
+import androidx.health.services.client.data.BatchingMode
import androidx.health.services.client.data.ComparisonType
import androidx.health.services.client.data.DataType
import androidx.health.services.client.data.DataTypeAvailability
@@ -62,7 +63,6 @@
import com.google.common.collect.ImmutableSet
import com.google.common.truth.Truth
import java.util.concurrent.CancellationException
-import kotlin.test.assertFailsWith
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.TestScope
@@ -741,31 +741,65 @@
@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
@Test
- fun updateExerciseTypeConfigForActiveExercise() = runTest {
- service.exerciseConfig = ExerciseConfig.builder(ExerciseType.GOLF).build()
+ fun updateExerciseTypeConfigForActiveExerciseSynchronously() = runTest {
+ val exerciseConfig = ExerciseConfig.builder(ExerciseType.GOLF).build()
val exerciseTypeConfig =
- GolfExerciseTypeConfig(GolfExerciseTypeConfig
- .GolfShotTrackingPlaceInfo.GOLF_SHOT_TRACKING_PLACE_INFO_FAIRWAY)
- val request =
- UpdateExerciseTypeConfigRequest(
- CLIENT_CONFIGURATION.servicePackageName, exerciseTypeConfig
+ GolfExerciseTypeConfig(
+ GolfExerciseTypeConfig
+ .GolfShotTrackingPlaceInfo.GOLF_SHOT_TRACKING_PLACE_INFO_FAIRWAY
)
- val statusCallback = IStatusCallback.Default()
- service.updateExerciseTypeConfigForActiveExercise(request, statusCallback)
+ client.setUpdateCallback(callback)
+ var deferred = async { client.startExercise(exerciseConfig) }
+ advanceMainLooperIdle()
+ deferred.await()
+ deferred = async {
+ client.updateExerciseTypeConfig(exerciseTypeConfig)
+ }
+ advanceMainLooperIdle()
+ deferred.await()
Truth.assertThat(service.exerciseConfig?.exerciseTypeConfig).isEqualTo(exerciseTypeConfig)
}
@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
@Test
- fun overrideBatchingModesForActiveExercise_notImplementedError() = runTest {
- var request: BatchingModeConfigRequest?
- request = null
- assertFailsWith(
- exceptionClass = NotImplementedError::class,
- block = { service.overrideBatchingModesForActiveExercise(request, null) }
- )
+ fun overrideBatchingModesForActiveExerciseSynchronously() = runTest {
+ val batchingMode = HashSet<BatchingMode>()
+ batchingMode.add(BatchingMode.HEART_RATE_5_SECONDS)
+ client.setUpdateCallback(callback)
+
+ var deferred = async {
+ client.overrideBatchingModesForActiveExercise(batchingMode)
+ }
+ advanceMainLooperIdle()
+ deferred.await()
+
+ Truth.assertThat(service.batchingModeOverrides?.size).isEqualTo(1)
+ }
+
+ @OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
+ @Test
+ fun clearBatchingModesForActiveExerciseSynchronously() = runTest {
+ val batchingMode = HashSet<BatchingMode>()
+ batchingMode.add(BatchingMode.HEART_RATE_5_SECONDS)
+ val emptyBatchingMode = HashSet<BatchingMode>()
+ client.setUpdateCallback(callback)
+ var deferred = async {
+ // override batching mode with HEART_RATE_5_SECONDS
+ client.overrideBatchingModesForActiveExercise(batchingMode)
+ }
+ advanceMainLooperIdle()
+ deferred.await()
+
+ deferred = async {
+ // Clear existing batching modes with empty set
+ client.overrideBatchingModesForActiveExercise(emptyBatchingMode)
+ }
+ advanceMainLooperIdle()
+ deferred.await()
+
+ Truth.assertThat(service.batchingModeOverrides?.size).isEqualTo(0)
}
class FakeExerciseUpdateCallback : ExerciseUpdateCallback {
@@ -808,6 +842,7 @@
var throwException = false
var callingAppHasPermissions = true
val registerGetCapabilitiesRequests = mutableListOf<CapabilitiesRequest>()
+ var batchingModeOverrides: Set<BatchingMode>? = null
override fun prepareExercise(
prepareExerciseRequest: PrepareExerciseRequest?,
@@ -934,7 +969,8 @@
batchingModeConfigRequest: BatchingModeConfigRequest?,
statuscallback: IStatusCallback?
) {
- throw NotImplementedError()
+ batchingModeOverrides = batchingModeConfigRequest?.batchingModeOverrides
+ statusCallbackAction.invoke(statuscallback)
}
override fun getCapabilities(request: CapabilitiesRequest): ExerciseCapabilitiesResponse {
@@ -995,7 +1031,7 @@
override fun updateExerciseTypeConfigForActiveExercise(
updateExerciseTypeConfigRequest: UpdateExerciseTypeConfigRequest,
- statuscallback: IStatusCallback
+ statusCallback: IStatusCallback,
) {
val newExerciseTypeConfig = updateExerciseTypeConfigRequest.exerciseTypeConfig
val newExerciseConfig =
@@ -1003,6 +1039,7 @@
exerciseConfig!!.exerciseType
).setExerciseTypeConfig(newExerciseTypeConfig).build()
this.exerciseConfig = newExerciseConfig
+ statusCallbackAction.invoke(statusCallback)
}
fun setException() {
@@ -1028,4 +1065,4 @@
IpcConstants.EXERCISE_API_BIND_ACTION
)
}
-}
\ No newline at end of file
+}
diff --git a/health/health-services-client/src/test/java/androidx/health/services/client/impl/ServiceBackedExerciseClientTest.kt b/health/health-services-client/src/test/java/androidx/health/services/client/impl/ServiceBackedExerciseClientTest.kt
index a0c580b..1164cbf 100644
--- a/health/health-services-client/src/test/java/androidx/health/services/client/impl/ServiceBackedExerciseClientTest.kt
+++ b/health/health-services-client/src/test/java/androidx/health/services/client/impl/ServiceBackedExerciseClientTest.kt
@@ -22,6 +22,7 @@
import android.os.Looper.getMainLooper
import androidx.health.services.client.ExerciseUpdateCallback
import androidx.health.services.client.data.Availability
+import androidx.health.services.client.data.BatchingMode
import androidx.health.services.client.data.DataType
import androidx.health.services.client.data.DataType.Companion.HEART_RATE_BPM
import androidx.health.services.client.data.DataType.Companion.HEART_RATE_BPM_STATS
@@ -48,6 +49,7 @@
import androidx.health.services.client.impl.response.ExerciseCapabilitiesResponse
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertFailsWith
import org.junit.After
import org.junit.Before
import org.junit.Test
@@ -221,6 +223,38 @@
assertThat(callback.availabilities).containsEntry(HEART_RATE_BPM, ACQUIRING)
}
+ @Test
+ fun updateExerciseTypeConfigForActiveExercise() {
+ val exerciseConfig = ExerciseConfig.builder(ExerciseType.GOLF).build()
+ val exerciseTypeConfig =
+ GolfExerciseTypeConfig(
+ GolfExerciseTypeConfig
+ .GolfShotTrackingPlaceInfo.GOLF_SHOT_TRACKING_PLACE_INFO_FAIRWAY
+ )
+ client.setUpdateCallback(callback)
+ client.startExerciseAsync(exerciseConfig)
+ shadowOf(getMainLooper()).idle()
+
+ client.updateExerciseTypeConfigAsync(exerciseTypeConfig)
+ shadowOf(getMainLooper()).idle()
+
+ assertThat(fakeService.exerciseConfig?.exerciseTypeConfig).isEqualTo(exerciseTypeConfig)
+ }
+
+ @Test
+ fun overrideBatchingModesForActiveExercise_notImplementedError() {
+ val batchingMode = HashSet<BatchingMode>()
+ client.setUpdateCallback(callback)
+
+ assertFailsWith(
+ exceptionClass = NotImplementedError::class,
+ block = {
+ client.overrideBatchingModesForActiveExerciseAsync(batchingMode)
+ shadowOf(getMainLooper()).idle()
+ }
+ )
+ }
+
class FakeExerciseUpdateCallback : ExerciseUpdateCallback {
val availabilities = mutableMapOf<DataType<*, *>, Availability>()
val registrationFailureThrowables = mutableListOf<Throwable>()
@@ -249,6 +283,7 @@
var listener: IExerciseUpdateListener? = null
var statusCallbackAction: (IStatusCallback?) -> Unit = { it!!.onSuccess() }
+ var exerciseConfig: ExerciseConfig? = null
override fun getApiVersion(): Int = 12
@@ -263,6 +298,7 @@
startExerciseRequest: StartExerciseRequest?,
statusCallback: IStatusCallback?
) {
+ exerciseConfig = startExerciseRequest?.exerciseConfig
statusCallbackAction.invoke(statusCallback)
}
@@ -343,10 +379,16 @@
}
override fun updateExerciseTypeConfigForActiveExercise(
- updateExerciseTypeConfigRequest: UpdateExerciseTypeConfigRequest?,
- statuscallback: IStatusCallback?
+ updateExerciseTypeConfigRequest: UpdateExerciseTypeConfigRequest,
+ statuscallback: IStatusCallback
) {
- throw NotImplementedError()
+ val newExerciseTypeConfig = updateExerciseTypeConfigRequest.exerciseTypeConfig
+ val newExerciseConfig =
+ ExerciseConfig.builder(
+ exerciseConfig!!.exerciseType
+ ).setExerciseTypeConfig(newExerciseTypeConfig).build()
+ this.exerciseConfig = newExerciseConfig
+ this.statusCallbackAction.invoke(statuscallback)
}
}
}
diff --git a/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java b/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
index 052b00f..553e919 100644
--- a/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
+++ b/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
@@ -18,6 +18,7 @@
import android.content.Context;
+import androidx.annotation.GuardedBy;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
@@ -33,6 +34,7 @@
import java.nio.charset.StandardCharsets;
import java.util.Vector;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
@@ -938,25 +940,46 @@
}
@Test
- @MediumTest
+ @LargeTest
public void testConsoleLogging() throws Throwable {
final class LoggingJavaScriptConsoleCallback implements JavaScriptConsoleCallback {
- private StringBuilder mMessages = new StringBuilder();
+ private final Object mLock = new Object();
+ @GuardedBy("mLock")
+ private final StringBuilder mMessages = new StringBuilder();
public static final String CLEAR_MARKER = "(console.clear() called)\n";
+ // This is required for synchronization between the instrumentation thread and the UI
+ // thread.
+ public CountDownLatch latch;
+
+ LoggingJavaScriptConsoleCallback(int numberOfCalls) {
+ latch = new CountDownLatch(numberOfCalls);
+ }
@Override
public void onConsoleMessage(JavaScriptConsoleCallback.ConsoleMessage message) {
- mMessages.append(message.toString()).append("\n");
+ synchronized (mLock) {
+ mMessages.append(message.toString()).append("\n");
+ }
+ latch.countDown();
}
@Override
public void onConsoleClear() {
- mMessages.append(CLEAR_MARKER);
+ synchronized (mLock) {
+ mMessages.append(CLEAR_MARKER);
+ }
+ latch.countDown();
}
public String messages() {
- return mMessages.toString();
+ synchronized (mLock) {
+ return mMessages.toString();
+ }
+ }
+
+ public void resetLatch(int count) {
+ latch = new CountDownLatch(count);
}
}
@@ -989,16 +1012,19 @@
+ "D <expression>:12:9: I am counting: 1\n"
+ "D <expression>:13:9: I am counting: 2\n"
+ LoggingJavaScriptConsoleCallback.CLEAR_MARKER;
+ final int numOfLogs = 11;
final Context context = ApplicationProvider.getApplicationContext();
final ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+ JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
Assume.assumeTrue(jsSandbox.isFeatureSupported(
JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING));
- final LoggingJavaScriptConsoleCallback client1 = new LoggingJavaScriptConsoleCallback();
- final LoggingJavaScriptConsoleCallback client2 = new LoggingJavaScriptConsoleCallback();
+ final LoggingJavaScriptConsoleCallback client1 =
+ new LoggingJavaScriptConsoleCallback(numOfLogs);
+ final LoggingJavaScriptConsoleCallback client2 =
+ new LoggingJavaScriptConsoleCallback(numOfLogs);
// Test logging does not crash when no client attached
// (There may be no inspector)
{
@@ -1017,6 +1043,7 @@
final String result = resultFuture.get(5, TimeUnit.SECONDS);
Assert.assertEquals(expected, result);
+ Assert.assertTrue(client1.latch.await(2, TimeUnit.SECONDS));
Assert.assertEquals(expectedLog, client1.messages());
}
// Test client can be replaced
@@ -1028,9 +1055,8 @@
final String result = resultFuture.get(5, TimeUnit.SECONDS);
Assert.assertEquals(expected, result);
+ Assert.assertTrue(client2.latch.await(2, TimeUnit.SECONDS));
Assert.assertEquals(expectedLog, client2.messages());
- // Ensure client1 hasn't received anything additional
- Assert.assertEquals(expectedLog, client1.messages());
}
// Test client can be nullified/disabled
// (This may tear down the inspector)
@@ -1041,21 +1067,24 @@
final String result = resultFuture.get(5, TimeUnit.SECONDS);
Assert.assertEquals(expected, result);
- // Ensure clients haven't received anything additional
- Assert.assertEquals(expectedLog, client1.messages());
- Assert.assertEquals(expectedLog, client2.messages());
}
// Ensure console messaging can be re-enabled (on an existing client)
// (This may spin up a new inspector)
{
+ client1.resetLatch(numOfLogs);
jsIsolate.setConsoleCallback(client1);
final ListenableFuture<String> resultFuture =
jsIsolate.evaluateJavaScriptAsync(code);
final String result = resultFuture.get(5, TimeUnit.SECONDS);
Assert.assertEquals(expected, result);
+ Assert.assertTrue(client1.latch.await(2, TimeUnit.SECONDS));
Assert.assertEquals(expectedLog + expectedLog, client1.messages());
- // Ensure client2 hasn't received anything additional
+ }
+ // Ensure client1 and client2 hasn't received anything additional
+ {
+ Thread.sleep(1000);
+ Assert.assertEquals(expectedLog + expectedLog, client1.messages());
Assert.assertEquals(expectedLog, client2.messages());
}
}
@@ -1085,26 +1114,28 @@
final ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+ JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
Assume.assumeTrue(jsSandbox.isFeatureSupported(
JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING));
Assume.assumeTrue(
jsSandbox.isFeatureSupported(JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
- jsIsolate.setConsoleCallback(new JavaScriptConsoleCallback(){
- @Override
- public void onConsoleMessage(ConsoleMessage message) {}
+ CountDownLatch latch = new CountDownLatch(1);
+ jsIsolate.setConsoleCallback(new JavaScriptConsoleCallback() {
+ @Override
+ public void onConsoleMessage(ConsoleMessage message) {}
- @Override
- public void onConsoleClear() {
- jsIsolate.evaluateJavaScriptAsync(callbackCode);
- }
- });
+ @Override
+ public void onConsoleClear() {
+ jsIsolate.evaluateJavaScriptAsync(callbackCode);
+ latch.countDown();
+ }
+ });
final ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
// Note: the main executor is on a different thread to the instrumentation thread, so
// blocking here will not block the console callback.
final String result = resultFuture.get(5, TimeUnit.SECONDS);
-
+ Assert.assertTrue(latch.await(2, TimeUnit.SECONDS));
Assert.assertEquals(expected, result);
}
}
diff --git a/javascriptengine/javascriptengine/src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl b/javascriptengine/javascriptengine/src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
index 343ed0d..2d65770 100644
--- a/javascriptengine/javascriptengine/src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
+++ b/javascriptengine/javascriptengine/src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
@@ -53,13 +53,13 @@
* by the Binder transaction limit size.
*/
const String EVALUATE_WITHOUT_TRANSACTION_LIMIT =
- "EVALUATE_WITHOUT_TRANSACTION_LIMIT:DEV";
+ "EVALUATE_WITHOUT_TRANSACTION_LIMIT";
/**
* Feature flag indicating that an embedder can subscribe to console messages generated from the
* isolate.
*/
- const String CONSOLE_MESSAGING = "CONSOLE_MESSAGING:DEV";
+ const String CONSOLE_MESSAGING = "CONSOLE_MESSAGING";
/**
* @return A list of feature names supported by this implementation.
diff --git a/privacysandbox/ads/OWNERS b/privacysandbox/ads/OWNERS
index 67d0de6..213fd78 100644
--- a/privacysandbox/ads/OWNERS
+++ b/privacysandbox/ads/OWNERS
@@ -1,3 +1,11 @@
-# Please keep this list alphabetically sorted
-jmarkoff@google.com
-npattan@google.com
+# adservices.measurement OWNERS
+arpanah@google.com # Measurement Primary PoC
+lmohanan@google.com
+# adservices.customaudience, adservices.adselection OWNERS
+adigupt@google.com # FLEDGE Primary PoC
+galarragas@google.com
+# adservices.topics, .adid, .appsetid, .common OWNERS
+haoliuu@google.com # Primary PoC for Topics, Common
+npattan@google.com # Creator
+jmarkoff@google.com # DevRel Jetpack Lead
+carolinewang@google.com # DevRel TPM Lead
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/processor/PojoProcessor.kt b/room/room-compiler/src/main/kotlin/androidx/room/processor/PojoProcessor.kt
index 0f67cea..05c36d0 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/processor/PojoProcessor.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/processor/PojoProcessor.kt
@@ -742,8 +742,7 @@
fieldName = field.name,
jvmName = field.name,
type = field.type,
- callType = CallType.FIELD,
- isMutableField = !field.element.isFinal()
+ callType = CallType.FIELD
)
},
assignFromMethod = { match ->
@@ -756,8 +755,7 @@
CallType.SYNTHETIC_METHOD
} else {
CallType.METHOD
- },
- isMutableField = !field.element.isFinal()
+ }
)
},
reportAmbiguity = { matching ->
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/vo/FieldGetter.kt b/room/room-compiler/src/main/kotlin/androidx/room/vo/FieldGetter.kt
index 05165a4..28cd4c9 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/vo/FieldGetter.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/vo/FieldGetter.kt
@@ -30,7 +30,6 @@
val jvmName: String,
val type: XType,
val callType: CallType,
- val isMutableField: Boolean
) {
fun writeGet(ownerVar: String, outVar: String, builder: XCodeBlock.Builder) {
builder.addLocalVariable(
@@ -48,14 +47,11 @@
scope: CodeGenScope
) {
val varExpr = getterExpression(ownerVar, scope.language)
- // A temporary local val is needed in Kotlin if the field or property is mutable (var)
- // and is nullable since otherwise smart cast will fail indicating that the property
- // might have changed when binding to statement.
- val needTempVal = scope.language == CodeLanguage.KOTLIN &&
- (callType == CallType.FIELD || callType == CallType.SYNTHETIC_METHOD) &&
- type.nullability != XNullability.NONNULL &&
- isMutableField
- if (needTempVal) {
+ // A temporary local val is needed in Kotlin whenever the getter method returns nullable or
+ // the field / property is nullable such that a smart cast can be properly performed. Even
+ // if the field / property are immutable (val), we still use a local val in case the
+ // property is declared in another module, which would make the smart cast impossible.
+ if (scope.language == CodeLanguage.KOTLIN && type.nullability != XNullability.NONNULL) {
val tmpField = scope.getTmpVar("_tmp${fieldName.capitalize(Locale.US)}")
scope.builder.addLocalVariable(
name = tmpField,
@@ -81,7 +77,7 @@
CallType.FIELD, CallType.SYNTHETIC_METHOD ->
XCodeBlock.of(codeLanguage, "%L.%L", ownerVar, fieldName)
CallType.METHOD ->
- XCodeBlock.of(codeLanguage, "%L.%L", ownerVar, jvmName)
+ XCodeBlock.of(codeLanguage, "%L.%L()", ownerVar, jvmName)
CallType.CONSTRUCTOR -> error("Getters should never be of type 'constructor'!")
}
}
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/EntityNameMatchingVariationsTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/EntityNameMatchingVariationsTest.kt
index 170837e..c71cc23 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/EntityNameMatchingVariationsTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/EntityNameMatchingVariationsTest.kt
@@ -78,7 +78,7 @@
assertThat(field.setter)
.isEqualTo(FieldSetter(field.name, setterName, intType, CallType.METHOD))
assertThat(field.getter)
- .isEqualTo(FieldGetter(field.name, getterName, intType, CallType.METHOD, true))
+ .isEqualTo(FieldGetter(field.name, getterName, intType, CallType.METHOD))
}
}
}
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/Fts3TableEntityProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/Fts3TableEntityProcessorTest.kt
index ec64f94..e959e20 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/Fts3TableEntityProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/Fts3TableEntityProcessorTest.kt
@@ -84,7 +84,7 @@
assertThat(field.setter,
`is`(FieldSetter("rowId", "setRowId", intType, CallType.METHOD)))
assertThat(field.getter,
- `is`(FieldGetter("rowId", "getRowId", intType, CallType.METHOD, true)))
+ `is`(FieldGetter("rowId", "getRowId", intType, CallType.METHOD)))
assertThat(entity.primaryKey.fields, `is`(Fields(field)))
assertThat(entity.shadowTableName, `is`("MyEntity_content"))
assertThat(entity.ftsVersion, `is`(FtsVersion.FTS3))
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/Fts4TableEntityProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/Fts4TableEntityProcessorTest.kt
index fef806c..178c2938 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/Fts4TableEntityProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/Fts4TableEntityProcessorTest.kt
@@ -71,7 +71,7 @@
assertThat(field.setter,
`is`(FieldSetter("rowId", "setRowId", intType, CallType.METHOD)))
assertThat(field.getter,
- `is`(FieldGetter("rowId", "getRowId", intType, CallType.METHOD, true)))
+ `is`(FieldGetter("rowId", "getRowId", intType, CallType.METHOD)))
assertThat(entity.primaryKey.fields, `is`(Fields(field)))
assertThat(entity.shadowTableName, `is`("MyEntity_content"))
assertThat(entity.ftsVersion, `is`(FtsVersion.FTS4))
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt
index 7623237..b345b6f 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt
@@ -2099,8 +2099,7 @@
fieldName = "isbn",
jvmName = "getIsbn",
type = stringType,
- callType = CallType.SYNTHETIC_METHOD,
- isMutableField = true
+ callType = CallType.SYNTHETIC_METHOD
)
)
Truth.assertThat(
@@ -2121,8 +2120,7 @@
fieldName = "isbn2",
jvmName = "getIsbn2",
type = stringType.makeNullable(),
- callType = CallType.SYNTHETIC_METHOD,
- isMutableField = true
+ callType = CallType.SYNTHETIC_METHOD
)
)
Truth.assertThat(
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/TableEntityProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/TableEntityProcessorTest.kt
index a7291ea..e7d8207 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/TableEntityProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/TableEntityProcessorTest.kt
@@ -77,7 +77,7 @@
)
assertThat(field.setter, `is`(FieldSetter("id", "setId", intType, CallType.METHOD)))
assertThat(field.getter,
- `is`(FieldGetter("id", "getId", intType, CallType.METHOD, true)))
+ `is`(FieldGetter("id", "getId", intType, CallType.METHOD)))
assertThat(entity.primaryKey.fields, `is`(Fields(field)))
}
}
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/verifier/DatabaseVerifierTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/verifier/DatabaseVerifierTest.kt
index dd79611f..0abf406 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/verifier/DatabaseVerifierTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/verifier/DatabaseVerifierTest.kt
@@ -438,7 +438,7 @@
}
private fun assignGetterSetter(f: Field, name: String, type: XType) {
- f.getter = FieldGetter(f.name, name, type, CallType.FIELD, true)
+ f.getter = FieldGetter(f.name, name, type, CallType.FIELD)
f.setter = FieldSetter(f.name, name, type, CallType.FIELD)
}
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/writer/DaoKotlinCodeGenTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/writer/DaoKotlinCodeGenTest.kt
index 7cf8c7f..11f0ed7 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/writer/DaoKotlinCodeGenTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/writer/DaoKotlinCodeGenTest.kt
@@ -86,21 +86,34 @@
interface MyDao {
@Query("SELECT * FROM MyEntity")
fun getEntity(): MyEntity
+
+ @Insert
+ fun addEntity(item: MyEntity)
}
""".trimIndent()
)
val javaEntity = Source.java(
"MyEntity",
"""
+ import androidx.annotation.Nullable;
import androidx.room.*;
@Entity
public class MyEntity {
@PrimaryKey
private long mValue;
-
+
+ @Nullable
+ private String mNullableValue;
+
public long getValue() { return mValue; }
public void setValue(long value) { mValue = value; }
+
+ @Nullable
+ public String getNullableValue() { return mNullableValue; }
+ public void setNullableValue(@Nullable String nullableValue) {
+ mNullableValue = nullableValue;
+ }
}
""".trimIndent()
)
@@ -110,6 +123,59 @@
)
}
+ // b/274760383
+ @Test
+ fun pojoRowAdapter_otherModule() {
+ val testName = object {}.javaClass.enclosingMethod!!.name
+ val lib = compileFiles(
+ sources = listOf(
+ Source.kotlin(
+ "MyEntity.kt",
+ """
+ import androidx.room.*
+
+ @Entity
+ class MyEntity(
+ @PrimaryKey
+ val pk: Int,
+ val primitive: Long = 0,
+ val string: String = "",
+ val nullableString: String? = null,
+ @JvmField val fieldString: String = "",
+ @JvmField val nullableFieldString: String? = null
+ ) {
+ var variablePrimitive: Long = 0
+ var variableString: String = ""
+ var variableNullableString: String? = null
+ @JvmField var variableFieldString: String = ""
+ @JvmField var variableNullableFieldString: String? = null
+ }
+ """.trimIndent()
+ )
+ )
+ )
+ val src = Source.kotlin(
+ "MyDao.kt",
+ """
+ import androidx.room.*
+
+ @Dao
+ interface MyDao {
+ @Query("SELECT * FROM MyEntity")
+ fun getEntity(): MyEntity
+
+ @Insert
+ fun addEntity(item: MyEntity)
+ }
+ """.trimIndent()
+ )
+ runTest(
+ sources = listOf(src, databaseSrc),
+ expectedFilePath = getTestGoldenPath(testName),
+ compiledFiles = lib
+ )
+ }
+
@Test
fun pojoRowAdapter_internalVisibility() {
val testName = object {}.javaClass.enclosingMethod!!.name
@@ -1310,6 +1376,7 @@
expectedFilePath = getTestGoldenPath(testName)
)
}
+
@Test
fun queryResultAdapter_optional() {
val testName = object {}.javaClass.enclosingMethod!!.name
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/entityRowAdapter.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/entityRowAdapter.kt
index e42eb9f..e823e0a 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/entityRowAdapter.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/entityRowAdapter.kt
@@ -36,10 +36,11 @@
val _tmp: Int = if (entity.valueBoolean) 1 else 0
statement.bindLong(2, _tmp.toLong())
statement.bindString(3, entity.valueString)
- if (entity.valueNullableString == null) {
+ val _tmpValueNullableString: String? = entity.valueNullableString
+ if (_tmpValueNullableString == null) {
statement.bindNull(4)
} else {
- statement.bindString(4, entity.valueNullableString)
+ statement.bindString(4, _tmpValueNullableString)
}
statement.bindLong(5, entity.variablePrimitive)
val _tmpVariableNullableBoolean: Boolean? = entity.variableNullableBoolean
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_boolean.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_boolean.kt
index ab6a26f..e4aa4f3 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_boolean.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_boolean.kt
@@ -34,7 +34,8 @@
statement.bindLong(1, entity.pk.toLong())
val _tmp: Int = if (entity.boolean) 1 else 0
statement.bindLong(2, _tmp.toLong())
- val _tmp_1: Int? = entity.nullableBoolean?.let { if (it) 1 else 0 }
+ val _tmpNullableBoolean: Boolean? = entity.nullableBoolean
+ val _tmp_1: Int? = _tmpNullableBoolean?.let { if (it) 1 else 0 }
if (_tmp_1 == null) {
statement.bindNull(3)
} else {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_byteArray.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_byteArray.kt
index 53dfdd2..284798e 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_byteArray.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_byteArray.kt
@@ -33,10 +33,11 @@
public override fun bind(statement: SupportSQLiteStatement, entity: MyEntity): Unit {
statement.bindLong(1, entity.pk.toLong())
statement.bindBlob(2, entity.byteArray)
- if (entity.nullableByteArray == null) {
+ val _tmpNullableByteArray: ByteArray? = entity.nullableByteArray
+ if (_tmpNullableByteArray == null) {
statement.bindNull(3)
} else {
- statement.bindBlob(3, entity.nullableByteArray)
+ statement.bindBlob(3, _tmpNullableByteArray)
}
}
}
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_enum.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_enum.kt
index 480173c..25aa37e 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_enum.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_enum.kt
@@ -33,10 +33,11 @@
public override fun bind(statement: SupportSQLiteStatement, entity: MyEntity): Unit {
statement.bindLong(1, entity.pk.toLong())
statement.bindString(2, __Fruit_enumToString(entity.enum))
- if (entity.nullableEnum == null) {
+ val _tmpNullableEnum: Fruit? = entity.nullableEnum
+ if (_tmpNullableEnum == null) {
statement.bindNull(3)
} else {
- statement.bindString(3, __Fruit_enumToString(entity.nullableEnum))
+ statement.bindString(3, __Fruit_enumToString(_tmpNullableEnum))
}
}
}
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_otherModule.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_otherModule.kt
new file mode 100644
index 0000000..8b4945d
--- /dev/null
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_otherModule.kt
@@ -0,0 +1,153 @@
+import android.database.Cursor
+import androidx.room.EntityInsertionAdapter
+import androidx.room.RoomDatabase
+import androidx.room.RoomSQLiteQuery
+import androidx.room.RoomSQLiteQuery.Companion.acquire
+import androidx.room.util.getColumnIndexOrThrow
+import androidx.room.util.query
+import androidx.sqlite.db.SupportSQLiteStatement
+import java.lang.Class
+import javax.`annotation`.processing.Generated
+import kotlin.Int
+import kotlin.Long
+import kotlin.String
+import kotlin.Suppress
+import kotlin.Unit
+import kotlin.collections.List
+import kotlin.jvm.JvmStatic
+
+@Generated(value = ["androidx.room.RoomProcessor"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
+public class MyDao_Impl(
+ __db: RoomDatabase,
+) : MyDao {
+ private val __db: RoomDatabase
+
+ private val __insertionAdapterOfMyEntity: EntityInsertionAdapter<MyEntity>
+ init {
+ this.__db = __db
+ this.__insertionAdapterOfMyEntity = object : EntityInsertionAdapter<MyEntity>(__db) {
+ public override fun createQuery(): String =
+ "INSERT OR ABORT INTO `MyEntity` (`pk`,`primitive`,`string`,`nullableString`,`fieldString`,`nullableFieldString`,`variablePrimitive`,`variableString`,`variableNullableString`,`variableFieldString`,`variableNullableFieldString`) VALUES (?,?,?,?,?,?,?,?,?,?,?)"
+
+ public override fun bind(statement: SupportSQLiteStatement, entity: MyEntity): Unit {
+ statement.bindLong(1, entity.pk.toLong())
+ statement.bindLong(2, entity.primitive)
+ statement.bindString(3, entity.string)
+ val _tmpNullableString: String? = entity.nullableString
+ if (_tmpNullableString == null) {
+ statement.bindNull(4)
+ } else {
+ statement.bindString(4, _tmpNullableString)
+ }
+ statement.bindString(5, entity.fieldString)
+ val _tmpNullableFieldString: String? = entity.nullableFieldString
+ if (_tmpNullableFieldString == null) {
+ statement.bindNull(6)
+ } else {
+ statement.bindString(6, _tmpNullableFieldString)
+ }
+ statement.bindLong(7, entity.variablePrimitive)
+ statement.bindString(8, entity.variableString)
+ val _tmpVariableNullableString: String? = entity.variableNullableString
+ if (_tmpVariableNullableString == null) {
+ statement.bindNull(9)
+ } else {
+ statement.bindString(9, _tmpVariableNullableString)
+ }
+ statement.bindString(10, entity.variableFieldString)
+ val _tmpVariableNullableFieldString: String? = entity.variableNullableFieldString
+ if (_tmpVariableNullableFieldString == null) {
+ statement.bindNull(11)
+ } else {
+ statement.bindString(11, _tmpVariableNullableFieldString)
+ }
+ }
+ }
+ }
+
+ public override fun addEntity(item: MyEntity): Unit {
+ __db.assertNotSuspendingTransaction()
+ __db.beginTransaction()
+ try {
+ __insertionAdapterOfMyEntity.insert(item)
+ __db.setTransactionSuccessful()
+ } finally {
+ __db.endTransaction()
+ }
+ }
+
+ public override fun getEntity(): MyEntity {
+ val _sql: String = "SELECT * FROM MyEntity"
+ val _statement: RoomSQLiteQuery = acquire(_sql, 0)
+ __db.assertNotSuspendingTransaction()
+ val _cursor: Cursor = query(__db, _statement, false, null)
+ try {
+ val _cursorIndexOfPk: Int = getColumnIndexOrThrow(_cursor, "pk")
+ val _cursorIndexOfPrimitive: Int = getColumnIndexOrThrow(_cursor, "primitive")
+ val _cursorIndexOfString: Int = getColumnIndexOrThrow(_cursor, "string")
+ val _cursorIndexOfNullableString: Int = getColumnIndexOrThrow(_cursor, "nullableString")
+ val _cursorIndexOfFieldString: Int = getColumnIndexOrThrow(_cursor, "fieldString")
+ val _cursorIndexOfNullableFieldString: Int = getColumnIndexOrThrow(_cursor,
+ "nullableFieldString")
+ val _cursorIndexOfVariablePrimitive: Int = getColumnIndexOrThrow(_cursor, "variablePrimitive")
+ val _cursorIndexOfVariableString: Int = getColumnIndexOrThrow(_cursor, "variableString")
+ val _cursorIndexOfVariableNullableString: Int = getColumnIndexOrThrow(_cursor,
+ "variableNullableString")
+ val _cursorIndexOfVariableFieldString: Int = getColumnIndexOrThrow(_cursor,
+ "variableFieldString")
+ val _cursorIndexOfVariableNullableFieldString: Int = getColumnIndexOrThrow(_cursor,
+ "variableNullableFieldString")
+ val _result: MyEntity
+ if (_cursor.moveToFirst()) {
+ val _tmpPk: Int
+ _tmpPk = _cursor.getInt(_cursorIndexOfPk)
+ val _tmpPrimitive: Long
+ _tmpPrimitive = _cursor.getLong(_cursorIndexOfPrimitive)
+ val _tmpString: String
+ _tmpString = _cursor.getString(_cursorIndexOfString)
+ val _tmpNullableString: String?
+ if (_cursor.isNull(_cursorIndexOfNullableString)) {
+ _tmpNullableString = null
+ } else {
+ _tmpNullableString = _cursor.getString(_cursorIndexOfNullableString)
+ }
+ val _tmpFieldString: String
+ _tmpFieldString = _cursor.getString(_cursorIndexOfFieldString)
+ val _tmpNullableFieldString: String?
+ if (_cursor.isNull(_cursorIndexOfNullableFieldString)) {
+ _tmpNullableFieldString = null
+ } else {
+ _tmpNullableFieldString = _cursor.getString(_cursorIndexOfNullableFieldString)
+ }
+ _result =
+ MyEntity(_tmpPk,_tmpPrimitive,_tmpString,_tmpNullableString,_tmpFieldString,_tmpNullableFieldString)
+ _result.variablePrimitive = _cursor.getLong(_cursorIndexOfVariablePrimitive)
+ _result.variableString = _cursor.getString(_cursorIndexOfVariableString)
+ if (_cursor.isNull(_cursorIndexOfVariableNullableString)) {
+ _result.variableNullableString = null
+ } else {
+ _result.variableNullableString = _cursor.getString(_cursorIndexOfVariableNullableString)
+ }
+ _result.variableFieldString = _cursor.getString(_cursorIndexOfVariableFieldString)
+ if (_cursor.isNull(_cursorIndexOfVariableNullableFieldString)) {
+ _result.variableNullableFieldString = null
+ } else {
+ _result.variableNullableFieldString =
+ _cursor.getString(_cursorIndexOfVariableNullableFieldString)
+ }
+ } else {
+ error("Cursor was empty, but expected a single item.")
+ }
+ return _result
+ } finally {
+ _cursor.close()
+ _statement.release()
+ }
+ }
+
+ public companion object {
+ @JvmStatic
+ public fun getRequiredConverters(): List<Class<*>> = emptyList()
+ }
+}
\ No newline at end of file
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_primitives_nullable.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_primitives_nullable.kt
index 19411e3..3ec68d0 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_primitives_nullable.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_primitives_nullable.kt
@@ -36,40 +36,47 @@
"INSERT OR ABORT INTO `MyEntity` (`int`,`short`,`byte`,`long`,`char`,`float`,`double`) VALUES (?,?,?,?,?,?,?)"
public override fun bind(statement: SupportSQLiteStatement, entity: MyEntity): Unit {
- if (entity.int == null) {
+ val _tmpInt: Int? = entity.int
+ if (_tmpInt == null) {
statement.bindNull(1)
} else {
- statement.bindLong(1, entity.int.toLong())
+ statement.bindLong(1, _tmpInt.toLong())
}
- if (entity.short == null) {
+ val _tmpShort: Short? = entity.short
+ if (_tmpShort == null) {
statement.bindNull(2)
} else {
- statement.bindLong(2, entity.short.toLong())
+ statement.bindLong(2, _tmpShort.toLong())
}
- if (entity.byte == null) {
+ val _tmpByte: Byte? = entity.byte
+ if (_tmpByte == null) {
statement.bindNull(3)
} else {
- statement.bindLong(3, entity.byte.toLong())
+ statement.bindLong(3, _tmpByte.toLong())
}
- if (entity.long == null) {
+ val _tmpLong: Long? = entity.long
+ if (_tmpLong == null) {
statement.bindNull(4)
} else {
- statement.bindLong(4, entity.long)
+ statement.bindLong(4, _tmpLong)
}
- if (entity.char == null) {
+ val _tmpChar: Char? = entity.char
+ if (_tmpChar == null) {
statement.bindNull(5)
} else {
- statement.bindLong(5, entity.char.toLong())
+ statement.bindLong(5, _tmpChar.toLong())
}
- if (entity.float == null) {
+ val _tmpFloat: Float? = entity.float
+ if (_tmpFloat == null) {
statement.bindNull(6)
} else {
- statement.bindDouble(6, entity.float.toDouble())
+ statement.bindDouble(6, _tmpFloat.toDouble())
}
- if (entity.double == null) {
+ val _tmpDouble: Double? = entity.double
+ if (_tmpDouble == null) {
statement.bindNull(7)
} else {
- statement.bindDouble(7, entity.double)
+ statement.bindDouble(7, _tmpDouble)
}
}
}
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_string.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_string.kt
index 534cef8..0a4b23b 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_string.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_string.kt
@@ -31,10 +31,11 @@
public override fun bind(statement: SupportSQLiteStatement, entity: MyEntity): Unit {
statement.bindString(1, entity.string)
- if (entity.nullableString == null) {
+ val _tmpNullableString: String? = entity.nullableString
+ if (_tmpNullableString == null) {
statement.bindNull(2)
} else {
- statement.bindString(2, entity.nullableString)
+ statement.bindString(2, _tmpNullableString)
}
}
}
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_uuid.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_uuid.kt
index 884c2a9..dd7f1df 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_uuid.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_uuid.kt
@@ -35,10 +35,11 @@
public override fun bind(statement: SupportSQLiteStatement, entity: MyEntity): Unit {
statement.bindLong(1, entity.pk.toLong())
statement.bindBlob(2, convertUUIDToByte(entity.uuid))
- if (entity.nullableUuid == null) {
+ val _tmpNullableUuid: UUID? = entity.nullableUuid
+ if (_tmpNullableUuid == null) {
statement.bindNull(3)
} else {
- statement.bindBlob(3, convertUUIDToByte(entity.nullableUuid))
+ statement.bindBlob(3, convertUUIDToByte(_tmpNullableUuid))
}
}
}
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_variableProperty_java.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_variableProperty_java.kt
index 6a0ead8..9ffae96 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_variableProperty_java.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_variableProperty_java.kt
@@ -1,15 +1,18 @@
import android.database.Cursor
+import androidx.room.EntityInsertionAdapter
import androidx.room.RoomDatabase
import androidx.room.RoomSQLiteQuery
import androidx.room.RoomSQLiteQuery.Companion.acquire
import androidx.room.util.getColumnIndexOrThrow
import androidx.room.util.query
+import androidx.sqlite.db.SupportSQLiteStatement
import java.lang.Class
import javax.`annotation`.processing.Generated
import kotlin.Int
import kotlin.Long
import kotlin.String
import kotlin.Suppress
+import kotlin.Unit
import kotlin.collections.List
import kotlin.jvm.JvmStatic
@@ -19,8 +22,35 @@
__db: RoomDatabase,
) : MyDao {
private val __db: RoomDatabase
+
+ private val __insertionAdapterOfMyEntity: EntityInsertionAdapter<MyEntity>
init {
this.__db = __db
+ this.__insertionAdapterOfMyEntity = object : EntityInsertionAdapter<MyEntity>(__db) {
+ public override fun createQuery(): String =
+ "INSERT OR ABORT INTO `MyEntity` (`mValue`,`mNullableValue`) VALUES (?,?)"
+
+ public override fun bind(statement: SupportSQLiteStatement, entity: MyEntity): Unit {
+ statement.bindLong(1, entity.getValue())
+ val _tmpMNullableValue: String? = entity.getNullableValue()
+ if (_tmpMNullableValue == null) {
+ statement.bindNull(2)
+ } else {
+ statement.bindString(2, _tmpMNullableValue)
+ }
+ }
+ }
+ }
+
+ public override fun addEntity(item: MyEntity): Unit {
+ __db.assertNotSuspendingTransaction()
+ __db.beginTransaction()
+ try {
+ __insertionAdapterOfMyEntity.insert(item)
+ __db.setTransactionSuccessful()
+ } finally {
+ __db.endTransaction()
+ }
}
public override fun getEntity(): MyEntity {
@@ -30,12 +60,20 @@
val _cursor: Cursor = query(__db, _statement, false, null)
try {
val _cursorIndexOfMValue: Int = getColumnIndexOrThrow(_cursor, "mValue")
+ val _cursorIndexOfMNullableValue: Int = getColumnIndexOrThrow(_cursor, "mNullableValue")
val _result: MyEntity
if (_cursor.moveToFirst()) {
_result = MyEntity()
val _tmpMValue: Long
_tmpMValue = _cursor.getLong(_cursorIndexOfMValue)
_result.setValue(_tmpMValue)
+ val _tmpMNullableValue: String?
+ if (_cursor.isNull(_cursorIndexOfMNullableValue)) {
+ _tmpMNullableValue = null
+ } else {
+ _tmpMNullableValue = _cursor.getString(_cursorIndexOfMNullableValue)
+ }
+ _result.setNullableValue(_tmpMNullableValue)
} else {
error("Cursor was empty, but expected a single item.")
}
diff --git a/settings.gradle b/settings.gradle
index 05d54be..4a28986 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -600,6 +600,7 @@
includeProject(":contentpager:contentpager", [BuildType.MAIN])
includeProject(":coordinatorlayout:coordinatorlayout", [BuildType.MAIN])
includeProject(":core:core", [BuildType.MAIN, BuildType.GLANCE, BuildType.MEDIA, BuildType.FLAN, BuildType.COMPOSE, BuildType.WEAR])
+includeProject(":core:core-testing", [BuildType.MAIN, BuildType.GLANCE, BuildType.MEDIA, BuildType.FLAN, BuildType.COMPOSE, BuildType.WEAR])
includeProject(":core:core:integration-tests:publishing", [BuildType.MAIN])
includeProject(":core:core-animation", [BuildType.MAIN])
includeProject(":core:core-animation-integration-tests:testapp", [BuildType.MAIN])
@@ -907,7 +908,8 @@
includeProject(":transition:transition-ktx", [BuildType.MAIN, BuildType.FLAN])
includeProject(":tv:tv-foundation", [BuildType.COMPOSE])
includeProject(":tv:tv-material", [BuildType.COMPOSE])
-includeProject(":tv:integration-tests:demos", [BuildType.COMPOSE])
+includeProject(":tv:integration-tests:playground", [BuildType.COMPOSE])
+includeProject(":tv:integration-tests:presentation", [BuildType.COMPOSE])
includeProject(":tv:tv-samples", "tv/samples", [BuildType.COMPOSE])
includeProject(":tvprovider:tvprovider", [BuildType.MAIN])
includeProject(":vectordrawable:integration-tests:testapp", [BuildType.MAIN])
diff --git a/tv/integration-tests/demos/src/main/baseline-prof.txt b/tv/integration-tests/demos/src/main/baseline-prof.txt
deleted file mode 100644
index 23fe742..0000000
--- a/tv/integration-tests/demos/src/main/baseline-prof.txt
+++ /dev/null
@@ -1,7782 +0,0 @@
-HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$1$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/ContentTransform;)V
-HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$1;-><init>(Landroidx/compose/animation/ContentTransform;)V
-HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$4$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentScope;)V
-HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$4;-><init>(Landroidx/compose/animation/AnimatedContentScope;Ljava/lang/Object;Lkotlin/jvm/functions/Function4;ILandroidx/compose/runtime/snapshots/SnapshotStateList;)V
-HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$8;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;II)V
-HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedContentKt;->AnimatedContent(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V
-HPLandroidx/compose/animation/AnimatedContentKt;->AnimatedContent(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V
-HPLandroidx/compose/animation/AnimatedContentKt;->with(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)Landroidx/compose/animation/ContentTransform;
-HPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;-><init>([Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/AnimatedContentMeasurePolicy;II)V
-HPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HPLandroidx/compose/animation/AnimatedContentScope$SizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedContentScope$SizeModifier$measure$size$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedContentScope$SizeModifier$measure$size$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedContentScope$SizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1;->invoke()Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2;-><init>(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;I)V
-HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$8;-><init>(Landroidx/compose/animation/core/MutableTransitionState;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V
-HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedEnterExitImpl(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
-HPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibility(Landroidx/compose/animation/core/MutableTransitionState;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibility(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HPLandroidx/compose/animation/AnimatedVisibilityKt;->targetEnterExit(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/EnterExitState;
-HPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;-><init>(Landroidx/compose/animation/core/Transition;)V
-HPLandroidx/compose/animation/ContentTransform;-><init>(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V
-HPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2;-><init>(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V
-HPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
-HPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/EnterExitTransitionKt$slideInHorizontally$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
-HPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/EnterTransition;->equals(Ljava/lang/Object;)Z
-HPLandroidx/compose/animation/EnterTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData;
-HPLandroidx/compose/animation/ExitTransition;->equals(Ljava/lang/Object;)Z
-HPLandroidx/compose/animation/ExitTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData;
-HPLandroidx/compose/animation/SizeTransformImpl;->createAnimationSpec-TemP2vQ(JJ)Landroidx/compose/animation/core/FiniteAnimationSpec;
-HPLandroidx/compose/animation/SlideModifier$measure$1$slideOffset$1;-><init>(Landroidx/compose/animation/SlideModifier;J)V
-HPLandroidx/compose/animation/SlideModifier$measure$1$slideOffset$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/SlideModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/SlideModifier$transitionSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/SlideModifier;-><init>(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V
-HPLandroidx/compose/animation/SlideModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HPLandroidx/compose/animation/core/AnimationVector2D;-><init>(FF)V
-HPLandroidx/compose/animation/core/AnimationVector2D;->get$animation_core_release(I)F
-HPLandroidx/compose/animation/core/AnimationVector2D;->getSize$animation_core_release()I
-HPLandroidx/compose/animation/core/AnimationVector2D;->set$animation_core_release(FI)V
-HPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F
-HPLandroidx/compose/animation/core/FloatTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
-HPLandroidx/compose/animation/core/FloatTweenSpec;->clampPlayTime(J)J
-HPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F
-HPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F
-HPLandroidx/compose/animation/core/MutableTransitionState;-><init>(Ljava/lang/Object;)V
-HPLandroidx/compose/animation/core/MutableTransitionState;->isIdle()Z
-HPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getValue()Ljava/lang/Object;
-HPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->updateAnimationStates(Landroidx/compose/animation/core/Transition$Segment;)V
-HPLandroidx/compose/animation/core/Transition$DeferredAnimation;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/String;)V
-HPLandroidx/compose/animation/core/Transition$DeferredAnimation;->animate(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;
-HPLandroidx/compose/animation/core/Transition$Segment;->isTransitioningTo(Landroidx/compose/animation/EnterExitState;Landroidx/compose/animation/EnterExitState;)Z
-HPLandroidx/compose/animation/core/Transition$SegmentImpl;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
-HPLandroidx/compose/animation/core/Transition$SegmentImpl;->equals(Ljava/lang/Object;)Z
-HPLandroidx/compose/animation/core/Transition$SegmentImpl;->getInitialState()Ljava/lang/Object;
-HPLandroidx/compose/animation/core/Transition$SegmentImpl;->getTargetState()Ljava/lang/Object;
-HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;-><init>(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;)V
-HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimation()Landroidx/compose/animation/core/TargetBasedAnimation;
-HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec;
-HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getValue()Ljava/lang/Object;
-HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateAnimation$default(Landroidx/compose/animation/core/Transition$TransitionAnimationState;Ljava/lang/Object;ZI)V
-HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateTargetValue$animation_core_release(Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;)V
-HPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;-><init>(Landroidx/compose/animation/core/Transition;F)V
-HPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/core/Transition$animateTo$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/core/Transition$animateTo$2;-><init>(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;I)V
-HPLandroidx/compose/animation/core/Transition$updateTarget$2;-><init>(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;I)V
-HPLandroidx/compose/animation/core/Transition;-><init>(Landroidx/compose/animation/core/MutableTransitionState;Ljava/lang/String;)V
-HPLandroidx/compose/animation/core/Transition;->animateTo$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V
-HPLandroidx/compose/animation/core/Transition;->getCurrentState()Ljava/lang/Object;
-HPLandroidx/compose/animation/core/Transition;->getSegment()Landroidx/compose/animation/core/Transition$Segment;
-HPLandroidx/compose/animation/core/Transition;->getTargetState()Ljava/lang/Object;
-HPLandroidx/compose/animation/core/Transition;->isSeeking()Z
-HPLandroidx/compose/animation/core/Transition;->onFrame$animation_core_release(FJ)V
-HPLandroidx/compose/animation/core/Transition;->onTransitionEnd$animation_core_release()V
-HPLandroidx/compose/animation/core/Transition;->updateTarget$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V
-HPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1;->dispose()V
-HPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1;->dispose()V
-HPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/core/TransitionKt;->createDeferredAnimation(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition$DeferredAnimation;
-HPLandroidx/compose/animation/core/TransitionKt;->createTransitionAnimation(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/String;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/Transition$TransitionAnimationState;
-HPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;
-HPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/animation/core/VectorizedAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HPLandroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
-HPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
-HPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
-HPLandroidx/compose/animation/core/VectorizedTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
-HPLandroidx/compose/animation/core/VectorizedTweenSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HPLandroidx/compose/animation/core/VectorizedTweenSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HPLandroidx/compose/foundation/BorderKt$drawRoundRectBorder$1;-><init>(ZLandroidx/compose/ui/graphics/Brush;JFFJJLandroidx/compose/ui/graphics/drawscope/Stroke;)V
-HPLandroidx/compose/foundation/BorderKt$drawRoundRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline;
-HPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;-><init>([Landroidx/compose/ui/layout/Placeable;Ljava/util/List;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/internal/Ref$IntRef;Lkotlin/jvm/internal/Ref$IntRef;Landroidx/compose/ui/Alignment;)V
-HPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/foundation/layout/PaddingValuesModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V
-HPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;-><init>(ZFLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/material/ripple/RippleContainer;)V
-HPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HPLandroidx/compose/material/ripple/PlatformRipple;->rememberUpdatedRippleInstance-942rkJo(Landroidx/compose/foundation/interaction/InteractionSource;ZFLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/Composer;)Landroidx/compose/material/ripple/RippleIndicationInstance;
-HPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/material/ripple/Ripple;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance;
-HPLandroidx/compose/material/ripple/RippleIndicationInstance;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V
-HPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/material3/ButtonElevation$animateElevation$3;-><init>(Landroidx/compose/animation/core/Animatable;Landroidx/compose/material3/ButtonElevation;FLandroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V
-HPLandroidx/compose/material3/ButtonElevation$animateElevation$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/material3/ButtonElevation;->animateElevation(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/AnimationState;
-HPLandroidx/compose/material3/ButtonKt$Button$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/material3/ButtonKt$Button$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/material3/ButtonKt$Button$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/material3/ButtonKt$Button$3;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;II)V
-HPLandroidx/compose/material3/ButtonKt;->Button(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HPLandroidx/compose/material3/ColorSchemeKt;->toColor(ILandroidx/compose/runtime/Composer;)J
-HPLandroidx/compose/material3/MinimumTouchTargetModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/material3/MinimumTouchTargetModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HPLandroidx/compose/material3/SurfaceKt$Surface$3;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFIFLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-HPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/material3/TextKt$Text$2;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;III)V
-HPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HPLandroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/runtime/AbstractApplier;->clear()V
-HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
-HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
-HPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2;Landroidx/compose/runtime/ComposerImpl;)V
-HPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V
-HPLandroidx/compose/runtime/ComposerImpl;->endMovableGroup()V
-HPLandroidx/compose/runtime/ComposerImpl;->startMovableGroup(ILjava/lang/Object;)V
-HPLandroidx/compose/runtime/CompositionImpl;->dispose()V
-HPLandroidx/compose/runtime/JoinedKey;->hashCode()I
-HPLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I
-HPLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z
-HPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArrayIntMap;)V
-HPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
-HPLandroidx/compose/runtime/SlotWriter;->fixParentAnchorsFor(III)V
-HPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V
-HPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V
-HPLandroidx/compose/runtime/snapshots/Snapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getModification$runtime_release()I
-HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->listIterator()Ljava/util/ListIterator;
-HPLandroidx/compose/runtime/snapshots/StateListIterator;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateList;I)V
-HPLandroidx/compose/runtime/snapshots/StateListIterator;->hasNext()Z
-HPLandroidx/compose/runtime/snapshots/StateListIterator;->next()Ljava/lang/Object;
-HPLandroidx/compose/runtime/snapshots/StateListIterator;->validateModification()V
-HPLandroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;->onDetach()V
-HPLandroidx/compose/ui/geometry/RoundRectKt;->isSimple(Landroidx/compose/ui/geometry/RoundRect;)Z
-HPLandroidx/compose/ui/graphics/AndroidCanvas;->clipRect-N_I0leg(FFFFI)V
-HPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HPLandroidx/compose/ui/graphics/Canvas;->clipRect-mtrdD-E(Landroidx/compose/ui/geometry/Rect;I)V
-HPLandroidx/compose/ui/graphics/ColorKt;->luminance-8_81llA(J)F
-HPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer$$inlined$modifierElementOf$1;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/arch/core/executor/TaskExecutor;Landroidx/compose/ui/graphics/ColorFilter;I)V
-HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
-HPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V
-HPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()Ljava/lang/Object;
-HPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V
-HPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V
-HPLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V
-HPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V
-HPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/ui/node/UiApplier;->onClear()V
-HPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusedRect(Landroid/graphics/Rect;)V
-HPLandroidx/compose/ui/platform/AndroidComposeView;->onDetach(Landroidx/compose/ui/node/LayoutNode;)V
-HPLandroidx/compose/ui/unit/Constraints$Companion;->fixedWidth-OenEA2s(I)J
-HPLandroidx/compose/ui/unit/IntOffset;->equals(Ljava/lang/Object;)Z
-HPLandroidx/compose/ui/unit/IntSize;->equals(Ljava/lang/Object;)Z
-HPLandroidx/tv/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridDslKt$rememberColumnWidthSums$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridDslKt$rememberRowHeightSums$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridIntervalContent;->getKey()Lkotlin/jvm/functions/Function1;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridIntervalContent;->getType()Lkotlin/jvm/functions/Function1;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->Item(ILandroidx/compose/runtime/Composer;I)V
-HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->getContentType(I)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->getHasCustomSpans()Z
-HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->getItemCount()I
-HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->getKey(I)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->getKeyToIndexMap()Ljava/util/Map;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->Item(ILandroidx/compose/runtime/Composer;I)V
-HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getContentType(I)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getItemCount()I
-HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getKey(I)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getKeyToIndexMap()Ljava/util/Map;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getSpanLayoutProvider()Landroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$1;-><init>(Landroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;Landroidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider;)V
-HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;JII)V
-HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredItemProvider$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ZZIILandroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;J)V
-HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredItemProvider$1;->createItem-ejjdvUs(ILjava/lang/Object;IILjava/util/List;)Landroidx/tv/foundation/lazy/grid/LazyMeasuredItem;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredLineProvider$1;-><init>(ZLjava/util/List;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;I)V
-HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredLineProvider$1;->createLine-62kVtck(I[Landroidx/tv/foundation/lazy/grid/LazyMeasuredItem;Ljava/util/List;I)Landroidx/tv/foundation/lazy/grid/LazyMeasuredLine;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridKt;->LazyGrid(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/grid/TvLazyGridState;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/PaddingValues;ZZZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/tv/foundation/PivotOffsets;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V
-HPLandroidx/tv/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridPositionedItem;-><init>(JILjava/lang/Object;IIJIIZLjava/util/List;Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;JIZ)V
-HPLandroidx/tv/foundation/lazy/grid/LazyGridPositionedItem;->getAnimationSpec(I)Landroidx/compose/animation/core/FiniteAnimationSpec;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->update-cXEmwJU(II)V
-HPLandroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider$LineConfiguration;-><init>(ILjava/util/List;)V
-HPLandroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;->getLineConfiguration(I)Landroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider$LineConfiguration;
-HPLandroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;->getLineIndexOfItem-lRO02eA(I)I
-HPLandroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;->getTotalSize()I
-HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredItem;-><init>(ILjava/lang/Object;ZIIZLandroidx/compose/ui/unit/LayoutDirection;IILjava/util/List;Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;J)V
-HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredItem;->position(IIIIII)Landroidx/tv/foundation/lazy/grid/LazyGridPositionedItem;
-HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredItemProvider;-><init>(Landroidx/tv/foundation/lazy/grid/LazyGridItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ILandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredItemProvider$1;)V
-HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredItemProvider;->getAndMeasure-ndEz314(IIJ)Landroidx/tv/foundation/lazy/grid/LazyMeasuredItem;
-HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredLine;-><init>(I[Landroidx/tv/foundation/lazy/grid/LazyMeasuredItem;Ljava/util/List;ZILandroidx/compose/ui/unit/LayoutDirection;II)V
-HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredLine;->position(III)Ljava/util/ArrayList;
-HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider;-><init>(ZLjava/util/List;IIILandroidx/tv/foundation/lazy/grid/LazyMeasuredItemProvider;Landroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;Landroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredLineProvider$1;)V
-HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider;->childConstraints-JhjzzOo$tv_foundation_release(II)J
-HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider;->getAndMeasure-MDRrEZU(I)Landroidx/tv/foundation/lazy/grid/LazyMeasuredLine;
-HPLandroidx/tv/foundation/lazy/grid/TvGridCells$Fixed;->calculateCrossAxisCellSizes(Landroidx/compose/ui/unit/Density;II)Ljava/util/ArrayList;
-HPLandroidx/tv/foundation/lazy/grid/TvLazyGridMeasureResult;-><init>(Landroidx/tv/foundation/lazy/grid/LazyMeasuredLine;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;ILandroidx/compose/foundation/gestures/Orientation;)V
-HPLandroidx/tv/foundation/lazy/grid/TvLazyGridScope$items$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/TvLazyGridState$scrollableState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/TvLazyGridState;-><init>(II)V
-HPLandroidx/tv/foundation/lazy/grid/TvLazyGridState;->getFirstVisibleItemIndex()I
-HPLandroidx/tv/foundation/lazy/grid/TvLazyGridState;->isVertical$tv_foundation_release()Z
-HPLandroidx/tv/foundation/lazy/grid/TvLazyGridState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HPLandroidx/tv/foundation/lazy/grid/TvLazyGridState;->updateScrollPositionIfTheFirstItemWasMoved$tv_foundation_release(Landroidx/tv/foundation/lazy/grid/LazyGridItemProvider;)V
-HPLandroidx/tv/foundation/lazy/list/LazyListMeasureKt;->createItemsBeforeList_kVT7Qgw$addItem$4(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/tv/foundation/lazy/list/LazyMeasuredItemProvider;I)V
-HPLandroidx/tv/foundation/lazy/list/LazyListPinnableContainerProviderKt$LazyListPinnableContainerProvider$2;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;ILkotlin/jvm/functions/Function2;I)V
-HPLandroidx/tv/material3/BringIntoViewIfChildrenAreFocusedKt$bringIntoViewIfChildrenAreFocused$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/material3/BringIntoViewIfChildrenAreFocusedKt$bringIntoViewIfChildrenAreFocused$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselDefaults;->IndicatorRow-hGBTI10(IILandroidx/compose/ui/Modifier;FLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HPLandroidx/tv/material3/CarouselItemDefaults$OverlayEnterTransition$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselItemKt$CarouselItem$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselItemKt$CarouselItem$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselItemKt$CarouselItem$4$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselItemKt$CarouselItem$4$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselItemKt$onAnimationCompletion$2;->invoke()Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselItemKt;->CarouselItem(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;JLandroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HPLandroidx/tv/material3/CarouselItemKt;->access$onAnimationCompletion(Landroidx/compose/animation/core/MutableTransitionState;Landroidx/tv/material3/CarouselItemKt$CarouselItem$1$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselKt$Carousel$5$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselKt$Carousel$5$2$1;-><init>(Landroidx/compose/animation/AnimatedVisibilityScope;Landroidx/compose/ui/focus/FocusRequester;Landroidx/compose/ui/focus/FocusManager;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HPLandroidx/tv/material3/CarouselKt$Carousel$5$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselKt$Carousel$5$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselKt$Carousel$6;-><init>(ILandroidx/compose/ui/Modifier;Landroidx/tv/material3/CarouselState;JLandroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;II)V
-HPLandroidx/tv/material3/CarouselKt$Carousel$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselKt$handleKeyEvents$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselKt$onAnimationCompletion$2;->invoke()Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselKt;->Carousel(ILandroidx/compose/ui/Modifier;Landroidx/tv/material3/CarouselState;JLandroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HPLandroidx/tv/material3/CarouselKt;->access$onAnimationCompletion(Landroidx/compose/animation/AnimatedVisibilityScope;Landroidx/tv/material3/CarouselKt$Carousel$5$2$1$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HPLandroidx/tv/material3/CarouselState;->getActiveSlideIndex()I
-HPLandroidx/tv/material3/ComposableSingletons$CarouselKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;->onJankReport(Ljava/lang/String;ILjava/util/ArrayList;)V
-HPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/example/tvcomposebasedtests/tvComponents/FeaturedCarouselKt$FeaturedCarousel$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/example/tvcomposebasedtests/tvComponents/FeaturedCarouselKt;->access$OverlayButton(Landroidx/compose/runtime/Composer;I)V
-HPLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$TvLazyRowsAndColumn$1$1$1$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$TvLazyRowsAndColumn$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/google/gson/Gson;->getAdapter(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-HPLcom/google/gson/JsonArray;-><init>()V
-HPLcom/google/gson/JsonElement;-><init>()V
-HPLcom/google/gson/JsonObject;-><init>()V
-HPLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/Boolean;)V
-HPLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/Number;)V
-HPLcom/google/gson/JsonPrimitive;->getAsNumber()Ljava/lang/Number;
-HPLcom/google/gson/TypeAdapter;-><init>()V
-HPLcom/google/gson/internal/$Gson$Types;->canonicalize(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
-HPLcom/google/gson/internal/LinkedTreeMap$EntrySet;-><init>(Lcom/google/gson/internal/LinkedTreeMap;)V
-HPLcom/google/gson/internal/LinkedTreeMap$Node;-><init>(ZLcom/google/gson/internal/LinkedTreeMap$Node;Ljava/lang/Object;Lcom/google/gson/internal/LinkedTreeMap$Node;Lcom/google/gson/internal/LinkedTreeMap$Node;)V
-HPLcom/google/gson/internal/LinkedTreeMap;-><init>(Z)V
-HPLcom/google/gson/internal/LinkedTreeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/google/gson/internal/LinkedTreeMap;->rebalance(Lcom/google/gson/internal/LinkedTreeMap$Node;Z)V
-HPLcom/google/gson/internal/LinkedTreeMap;->replaceInParent(Lcom/google/gson/internal/LinkedTreeMap$Node;Lcom/google/gson/internal/LinkedTreeMap$Node;)V
-HPLcom/google/gson/internal/LinkedTreeMap;->rotateLeft(Lcom/google/gson/internal/LinkedTreeMap$Node;)V
-HPLcom/google/gson/internal/LinkedTreeMap;->rotateRight(Lcom/google/gson/internal/LinkedTreeMap$Node;)V
-HPLcom/google/gson/internal/bind/CollectionTypeAdapterFactory$Adapter;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
-HPLcom/google/gson/internal/bind/JsonTreeWriter;-><init>()V
-HPLcom/google/gson/internal/bind/JsonTreeWriter;->beginArray()V
-HPLcom/google/gson/internal/bind/JsonTreeWriter;->beginObject()V
-HPLcom/google/gson/internal/bind/JsonTreeWriter;->endArray()V
-HPLcom/google/gson/internal/bind/JsonTreeWriter;->endObject()V
-HPLcom/google/gson/internal/bind/JsonTreeWriter;->get()Lcom/google/gson/JsonElement;
-HPLcom/google/gson/internal/bind/JsonTreeWriter;->peek()Lcom/google/gson/JsonElement;
-HPLcom/google/gson/internal/bind/JsonTreeWriter;->value(J)V
-HPLcom/google/gson/internal/bind/JsonTreeWriter;->value(Ljava/lang/Boolean;)V
-HPLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
-HPLcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;-><init>(Lcom/google/gson/Gson;Lcom/google/gson/TypeAdapter;Ljava/lang/reflect/Type;)V
-HPLcom/google/gson/internal/bind/TypeAdapters$11;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
-HPLcom/google/gson/internal/bind/TypeAdapters$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
-HPLcom/google/gson/reflect/TypeToken;->equals(Ljava/lang/Object;)Z
-HPLcom/google/gson/reflect/TypeToken;->hashCode()I
-HPLcom/google/gson/stream/JsonWriter;-><init>(Ljava/io/Writer;)V
-HPLcom/google/gson/stream/JsonWriter;->beginArray()V
-HPLcom/google/gson/stream/JsonWriter;->beginObject()V
-HPLcom/google/gson/stream/JsonWriter;->close(IIC)V
-HPLcom/google/gson/stream/JsonWriter;->name(Ljava/lang/String;)V
-HPLcom/google/gson/stream/JsonWriter;->peek()I
-HPLcom/google/gson/stream/JsonWriter;->string(Ljava/lang/String;)V
-HPLcom/google/gson/stream/JsonWriter;->value(Ljava/lang/Number;)V
-HPLcom/google/gson/stream/JsonWriter;->writeDeferredName()V
-HPLkotlinx/coroutines/CancellableContinuationImpl;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/util/concurrent/CancellationException;)V
-HPLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z
-HPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext;
-HPLkotlinx/coroutines/scheduling/Task;-><init>(JLkotlinx/coroutines/scheduling/TaskContext;)V
-HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->onContextAvailable()V
-HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticOutline0;->m(Ljava/lang/String;)Ljava/lang/StringBuilder;
-HSPLandroidx/activity/ComponentActivity$1;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$2;-><init>()V
-HSPLandroidx/activity/ComponentActivity$3;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/activity/ComponentActivity$4;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/activity/ComponentActivity$5;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/activity/ComponentActivity;-><init>()V
-HSPLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras;
-HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/LifecycleRegistry;
-HSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;
-HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
-HSPLandroidx/activity/ComponentActivity;->initViewTreeOwners()V
-HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
-HSPLandroidx/activity/ComponentActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
-HSPLandroidx/activity/OnBackPressedDispatcher;-><init>(Landroidx/activity/ComponentActivity$1;)V
-HSPLandroidx/activity/compose/ComponentActivityKt;-><clinit>()V
-HSPLandroidx/activity/contextaware/ContextAwareHelper;-><init>()V
-HSPLandroidx/activity/result/ActivityResultRegistry;-><init>()V
-HSPLandroidx/arch/core/executor/ArchTaskExecutor;-><init>()V
-HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor;
-HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;-><init>()V
-HSPLandroidx/arch/core/executor/DefaultTaskExecutor;-><init>()V
-HSPLandroidx/arch/core/executor/TaskExecutor;-><init>()V
-HSPLandroidx/arch/core/internal/FastSafeIterableMap;-><init>()V
-HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
-HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
-HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object;
-HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object;
-HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;-><init>(Landroidx/arch/core/internal/SafeIterableMap;)V
-HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z
-HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object;
-HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
-HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
-HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z
-HSPLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;-><init>()V
-HSPLandroidx/arch/core/internal/SafeIterableMap;-><init>()V
-HSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
-HSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator;
-HSPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/collection/ArraySet;-><clinit>()V
-HSPLandroidx/collection/ArraySet;-><init>()V
-HSPLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z
-HSPLandroidx/collection/ArraySet;->allocArrays(I)V
-HSPLandroidx/collection/ArraySet;->clear()V
-HSPLandroidx/collection/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V
-HSPLandroidx/collection/ArraySet;->indexOf(ILjava/lang/Object;)I
-HSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object;
-HSPLandroidx/collection/ContainerHelpers;-><clinit>()V
-HSPLandroidx/collection/SimpleArrayMap;-><init>()V
-HSPLandroidx/collection/SparseArrayCompat;-><clinit>()V
-HSPLandroidx/collection/SparseArrayCompat;-><init>()V
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;-><clinit>()V
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;-><init>()V
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/ColorVectorConverterKt;-><clinit>()V
-HSPLandroidx/compose/animation/ColorVectorConverterKt;->access$multiplyColumn(IFFF[F)F
-HSPLandroidx/compose/animation/FlingCalculator;-><init>(FLandroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/animation/FlingCalculatorKt;-><clinit>()V
-HSPLandroidx/compose/animation/SingleValueAnimationKt;-><clinit>()V
-HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/AnimationState;
-HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><init>(Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;-><clinit>()V
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;-><init>(Landroidx/compose/animation/core/Animatable;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;)V
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;-><init>(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/String;)V
-HSPLandroidx/compose/animation/core/Animatable;->access$clampToBounds(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;-><init>(Lkotlinx/coroutines/channels/Channel;Ljava/lang/Object;)V
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;-><init>(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt;-><clinit>()V
-HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateDpAsState-AjpBEmI(FLandroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/AnimationState;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Float;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/AnimationState;
-HSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z
-HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;-><clinit>()V
-HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;->compareTo(II)I
-HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;->ordinal(I)I
-HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;->values(I)[I
-HSPLandroidx/compose/animation/core/AnimationResult;-><init>(Landroidx/compose/animation/core/AnimationState;I)V
-HSPLandroidx/compose/animation/core/AnimationScope;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JLkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;I)V
-HSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V
-HSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/AnimationVector1D;-><init>(F)V
-HSPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F
-HSPLandroidx/compose/animation/core/AnimationVector1D;->getSize$animation_core_release()I
-HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V
-HSPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(FI)V
-HSPLandroidx/compose/animation/core/AnimationVector4D;-><init>(FFFF)V
-HSPLandroidx/compose/animation/core/AnimationVector4D;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/animation/core/AnimationVector4D;->get$animation_core_release(I)F
-HSPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I
-HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/AnimationVector4D;->reset$animation_core_release()V
-HSPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(FI)V
-HSPLandroidx/compose/animation/core/AnimationVector;-><init>()V
-HSPLandroidx/compose/animation/core/ComplexDouble;-><init>(DD)V
-HSPLandroidx/compose/animation/core/ComplexDoubleKt;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble;
-HSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;-><init>(Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;)V
-HSPLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFF)V
-HSPLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFI)V
-HSPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J
-HSPLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F
-HSPLandroidx/compose/animation/core/FloatSpringSpec;->getValueFromNanos(JFFF)F
-HSPLandroidx/compose/animation/core/FloatSpringSpec;->getVelocityFromNanos(JFFF)F
-HSPLandroidx/compose/animation/core/MutatorMutex$Mutator;-><init>(ILkotlinx/coroutines/Job;)V
-HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;-><init>(ILandroidx/compose/animation/core/MutatorMutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/MutatorMutex;-><init>()V
-HSPLandroidx/compose/animation/core/SpringSimulation;-><init>()V
-HSPLandroidx/compose/animation/core/SpringSimulation;->updateValues-IJZedt4$animation_core_release(FFJ)J
-HSPLandroidx/compose/animation/core/SpringSpec;-><init>(FFLjava/lang/Object;)V
-HSPLandroidx/compose/animation/core/SpringSpec;-><init>(Ljava/lang/Object;I)V
-HSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;
-HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedSpringSpec;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;-><init>(Landroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$2$1;Landroidx/compose/animation/core/TwoWayConverterImpl;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;-><init>(Landroidx/compose/animation/core/AnimationState;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationState;FLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;-><init>(Landroidx/compose/animation/core/AnimationState;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt;->animate(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt;->callWithFrameNanos(Landroidx/compose/animation/core/Animation;Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt;->doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F
-HSPLandroidx/compose/animation/core/SuspendAnimationKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;-><init>(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getDurationNanos()J
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTargetValue()Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z
-HSPLandroidx/compose/animation/core/TwoWayConverterImpl;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertFromVector()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertToVector()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V
-HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
-HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;-><init>(FF)V
-HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/Animations;)V
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->isInfinite()V
-HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;-><clinit>()V
-HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold()J
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;-><init>(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;-><clinit>()V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;-><init>()V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;-><clinit>()V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;-><init>()V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidOverscrollKt;-><clinit>()V
-HSPLandroidx/compose/foundation/Api31Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/widget/EdgeEffect;)F
-HSPLandroidx/compose/foundation/Api31Impl;-><clinit>()V
-HSPLandroidx/compose/foundation/Api31Impl;-><init>()V
-HSPLandroidx/compose/foundation/Api31Impl;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect;
-HSPLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffect;)F
-HSPLandroidx/compose/foundation/Background;-><init>(Landroidx/compose/ui/graphics/Color;Landroidx/compose/ui/graphics/Shape;)V
-HSPLandroidx/compose/foundation/Background;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/foundation/Background;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/BorderKt$border$2$1;-><init>(FLandroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/node/Ref;Landroidx/compose/ui/graphics/Brush;)V
-HSPLandroidx/compose/foundation/BorderKt$border$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/BorderKt$border$2;-><init>(FLandroidx/compose/ui/graphics/SolidColor;Landroidx/compose/ui/graphics/Shape;)V
-HSPLandroidx/compose/foundation/BorderKt$border$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/BorderKt$drawRectBorder$1;-><init>(Landroidx/compose/ui/graphics/Brush;JJLandroidx/arch/core/executor/TaskExecutor;)V
-HSPLandroidx/compose/foundation/BorderKt$drawRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;-><init>(Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$2;-><init>(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;-><init>(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;-><init>(Landroidx/compose/runtime/State;Z)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;-><init>(Landroidx/compose/runtime/MutableState;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4;-><init>(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Z)V
-HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1$1;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;-><init>(Landroidx/compose/ui/semantics/Role;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1;-><init>(ZLjava/util/Map;Landroidx/compose/runtime/MutableState;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt;->PressedInteractionSourceDisposableEffect(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/ClickableKt;->clickable-O2vRcR0(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/foundation/Clickable_androidKt;-><clinit>()V
-HSPLandroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;-><init>()V
-HSPLandroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline;
-HSPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;-><init>()V
-HSPLandroidx/compose/foundation/ClipScrollableContainerKt;-><clinit>()V
-HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->clipScrollableContainer(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/DefaultDebugIndication$DefaultDebugIndicationInstance;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/DefaultDebugIndication$DefaultDebugIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/foundation/DefaultDebugIndication;-><clinit>()V
-HSPLandroidx/compose/foundation/DefaultDebugIndication;-><init>()V
-HSPLandroidx/compose/foundation/DefaultDebugIndication;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance;
-HSPLandroidx/compose/foundation/DrawOverscrollModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
-HSPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/EdgeEffectCompat;->create(Landroid/content/Context;)Landroid/widget/EdgeEffect;
-HSPLandroidx/compose/foundation/EdgeEffectCompat;->getDistanceCompat(Landroid/widget/EdgeEffect;)F
-HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;-><clinit>()V
-HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;-><init>()V
-HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1;-><init>()V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1;-><init>(Landroidx/compose/ui/layout/PinnableContainer;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/relocation/BringIntoViewRequester;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$2;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5;-><init>(Landroidx/compose/ui/layout/PinnableContainer;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;)Z
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2$1;-><init>(Landroidx/compose/ui/input/InputModeManager;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)V
-HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt;-><clinit>()V
-HSPLandroidx/compose/foundation/FocusableKt;->focusable(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;-><clinit>()V
-HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;-><init>()V
-HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusedBoundsKt;-><clinit>()V
-HSPLandroidx/compose/foundation/FocusedBoundsModifier;-><init>()V
-HSPLandroidx/compose/foundation/FocusedBoundsModifier;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/foundation/FocusedBoundsModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$2$1;-><init>(ZLandroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3$1;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ImageKt$Image$2$measure$1;-><clinit>()V
-HSPLandroidx/compose/foundation/ImageKt$Image$2$measure$1;-><init>()V
-HSPLandroidx/compose/foundation/ImageKt$Image$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ImageKt$Image$2;-><clinit>()V
-HSPLandroidx/compose/foundation/ImageKt$Image$2;-><init>()V
-HSPLandroidx/compose/foundation/ImageKt$Image$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;-><init>(Ljava/lang/String;)V
-HSPLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ImageKt;->Image(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;-><clinit>()V
-HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;-><init>()V
-HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/IndicationKt$indication$2;-><init>(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/IndicationKt;-><clinit>()V
-HSPLandroidx/compose/foundation/IndicationModifier;-><init>(Landroidx/compose/foundation/IndicationInstance;)V
-HSPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/foundation/MutatePriority;-><clinit>()V
-HSPLandroidx/compose/foundation/MutatePriority;-><init>(ILjava/lang/String;)V
-HSPLandroidx/compose/foundation/MutatorMutex$Mutator;-><init>(Landroidx/compose/foundation/MutatePriority;Lkotlinx/coroutines/Job;)V
-HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;-><init>(Landroidx/compose/foundation/MutatePriority;Landroidx/compose/foundation/MutatorMutex;Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/MutatorMutex;-><init>()V
-HSPLandroidx/compose/foundation/OverscrollConfiguration;-><init>()V
-HSPLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;-><clinit>()V
-HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;-><init>()V
-HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/OverscrollConfigurationKt;-><clinit>()V
-HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;-><init>(I)V
-HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;-><init>(Lkotlinx/coroutines/CoroutineScope;ZLandroidx/compose/foundation/ScrollState;)V
-HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1;-><init>(Landroidx/compose/foundation/ScrollState;)V
-HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2;-><init>(Landroidx/compose/foundation/ScrollState;)V
-HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;-><init>(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V
-HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ScrollKt$scroll$2;-><init>(Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/gestures/FlingBehavior;ZZ)V
-HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;-><clinit>()V
-HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;-><init>()V
-HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$2;-><clinit>()V
-HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$2;-><init>()V
-HSPLandroidx/compose/foundation/ScrollState$canScrollBackward$2;-><init>(Landroidx/compose/foundation/ScrollState;)V
-HSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;-><init>(Landroidx/compose/foundation/ScrollState;)V
-HSPLandroidx/compose/foundation/ScrollState$scrollableState$1;-><init>(Landroidx/compose/foundation/ScrollState;)V
-HSPLandroidx/compose/foundation/ScrollState;-><clinit>()V
-HSPLandroidx/compose/foundation/ScrollState;-><init>(I)V
-HSPLandroidx/compose/foundation/ScrollState;->getValue()I
-HSPLandroidx/compose/foundation/ScrollingLayoutModifier$measure$1;-><init>(Landroidx/compose/foundation/ScrollingLayoutModifier;ILandroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/foundation/ScrollingLayoutModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ScrollingLayoutModifier;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V
-HSPLandroidx/compose/foundation/ScrollingLayoutModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/ScrollingLayoutModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/gestures/AndroidConfig;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/AndroidConfig;-><init>()V
-HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;-><init>(Landroidx/compose/foundation/gestures/ContentInViewModifier;)V
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;Z)V
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->bringChildIntoView(Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$1$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->calculateRectForParent(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onRemeasured-ozmzZPI(J)V
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->relocationDistance(FFF)F
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->relocationOffset-BMxPBkI(Landroidx/compose/ui/geometry/Rect;J)J
-HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpec;)V
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->scrollBy(F)F
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DragLogic;-><init>(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$6;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;-><init>(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/channels/Channel;ZLkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;-><init>(Landroidx/compose/ui/input/pointer/PointerInputScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/channels/Channel;ZLkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;-><init>(ZLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/channels/Channel;ZLkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9;-><init>(Landroidx/compose/foundation/gestures/ScrollDraggableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ZZ)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt;->access$awaitDownAndSlop(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable;
-HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitEachGesture(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/Orientation;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/Orientation;-><init>(ILjava/lang/String;)V
-HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;-><init>(Landroidx/compose/ui/input/pointer/PointerInputScope;)V
-HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->reset(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollDraggableState;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$1;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$2$1;-><init>(Lkotlin/jvm/internal/Ref$FloatRef;Landroidx/compose/foundation/gestures/ScrollScope;)V
-HSPLandroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$2;-><init>(FLandroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/internal/Ref$FloatRef;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollExtensionsKt;->animateScrollBy$default(Landroidx/compose/foundation/gestures/ScrollableState;FLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollExtensionsKt;->animateScrollBy(Landroidx/compose/foundation/gestures/ScrollableState;FLandroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;-><init>(Landroidx/compose/foundation/gestures/ScrollConfig;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;-><init>(Landroidx/compose/foundation/gestures/ScrollConfig;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;-><init>(Landroidx/compose/foundation/OverscrollEffect;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;ZZ)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1;-><init>(Landroidx/compose/runtime/MutableState;Z)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollingLogic;-><init>(Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/runtime/MutableState;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$NoPressGesture$1;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;-><init>(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;-><init>(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><init>()V
-HSPLandroidx/compose/foundation/interaction/FocusInteraction$Focus;-><init>()V
-HSPLandroidx/compose/foundation/interaction/FocusInteraction$Unfocus;-><init>(Landroidx/compose/foundation/interaction/FocusInteraction$Focus;)V
-HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/interaction/HoverInteractionKt$collectIsHoveredAsState$1$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/interaction/HoverInteractionKt$collectIsHoveredAsState$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/interaction/HoverInteractionKt$collectIsHoveredAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/interaction/HoverInteractionKt$collectIsHoveredAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;-><init>()V
-HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/SharedFlowImpl;
-HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/Arrangement$Bottom$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
-HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/Arrangement$End$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpaceAround$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpaceEvenly$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(F)V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/Arrangement$Start$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
-HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V
-HSPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/layout/MeasureScope;IILandroidx/compose/ui/Alignment;)V
-HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;-><init>(Z)V
-HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/BoxKt;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/layout/BoxKt;->access$placeInBox(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/unit/LayoutDirection;IILandroidx/compose/ui/Alignment;)V
-HSPLandroidx/compose/foundation/layout/BoxKt;->rememberBoxMeasurePolicy(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/layout/Arrangement$Vertical;)V
-HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/ColumnKt;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;-><init>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment;-><init>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment;-><init>(Landroidx/compose/ui/Alignment$Horizontal;)V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/layout/Placeable;)I
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment;-><init>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;-><init>(Landroidx/compose/ui/BiasAlignment$Vertical;)V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/layout/Placeable;)I
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;-><init>()V
-HSPLandroidx/compose/foundation/layout/FillModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/foundation/layout/FillModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/FillModifier;-><init>(IFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/FillModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/FillModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/HorizontalAlignModifier;-><init>()V
-HSPLandroidx/compose/foundation/layout/HorizontalAlignModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/HorizontalAlignModifier;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$HorizontalMaxHeight$1$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$HorizontalMaxHeight$1$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$HorizontalMaxHeight$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$HorizontalMaxHeight$1$2;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$HorizontalMaxHeight$1$2;-><init>()V
-HSPLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$HorizontalMaxHeight$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$HorizontalMaxHeight$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$HorizontalMaxHeight$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$HorizontalMaxHeight$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/OffsetModifier$measure$1;-><init>(Landroidx/compose/foundation/layout/OffsetModifier;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;)V
-HSPLandroidx/compose/foundation/layout/OffsetModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/OffsetModifier;-><init>(FF)V
-HSPLandroidx/compose/foundation/layout/OffsetModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/OffsetModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints$$ExternalSyntheticOutline0;->m(III)I
-HSPLandroidx/compose/foundation/layout/PaddingKt;->calculateEndPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F
-HSPLandroidx/compose/foundation/layout/PaddingKt;->calculateStartPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F
-HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/PaddingModifier$measure$1;-><init>(Landroidx/compose/foundation/layout/PaddingModifier;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;)V
-HSPLandroidx/compose/foundation/layout/PaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/PaddingModifier;-><init>(FFFF)V
-HSPLandroidx/compose/foundation/layout/PaddingModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/PaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;-><init>(FFFF)V
-HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateBottomPadding-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F
-HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F
-HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateTopPadding-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;-><init>(Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;Landroidx/compose/ui/layout/MeasureScope;)V
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;-><init>(ILkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/CrossAxisAlignment;)V
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->access$intrinsicSize(Ljava/util/List;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IIII)I
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getRowColumnParentData(Landroidx/compose/ui/layout/IntrinsicMeasurable;)Landroidx/compose/foundation/layout/RowColumnParentData;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->rowColumnMeasurePolicy-TDGSqEk(ILkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/CrossAxisAlignment;)Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;
-HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;-><init>(III[I)V
-HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;-><init>(ILkotlin/jvm/functions/Function5;FILandroidx/compose/foundation/layout/CrossAxisAlignment;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->crossAxisSize(Landroidx/compose/ui/layout/Placeable;)I
-HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisSize(Landroidx/compose/ui/layout/Placeable;)I
-HSPLandroidx/compose/foundation/layout/RowColumnParentData;-><init>(I)V
-HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical;)V
-HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/RowKt;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/foundation/layout/RowScopeInstance;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/RowScopeInstance;-><init>()V
-HSPLandroidx/compose/foundation/layout/SizeKt$createFillSizeModifier$1;-><init>(F)V
-HSPLandroidx/compose/foundation/layout/SizeKt$createFillWidthModifier$1;-><init>(F)V
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;-><init>(Landroidx/compose/ui/Alignment;)V
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$2;-><init>(Landroidx/compose/ui/Alignment;Z)V
-HSPLandroidx/compose/foundation/layout/SizeKt;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/SizeKt;->createWrapContentSizeModifier(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentModifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->height-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/foundation/layout/SizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/SizeModifier;-><init>(FFFF)V
-HSPLandroidx/compose/foundation/layout/SizeModifier;-><init>(FFFFI)V
-HSPLandroidx/compose/foundation/layout/SizeModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/SizeModifier;->getTargetConstraints-OenEA2s(Landroidx/compose/ui/unit/Density;)J
-HSPLandroidx/compose/foundation/layout/SizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/SpacerKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;-><init>()V
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;-><init>(Landroidx/compose/foundation/layout/WrapContentModifier;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V
-HSPLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/WrapContentModifier;-><init>(IZLkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/WrapContentModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/WrapContentModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider$Item$1;-><init>(Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;II)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->Item(ILandroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getContentType(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getItemCount()I
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getKey(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getKeyToIndexMap()Ljava/util/Map;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><init>(I)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;-><init>(IILjava/util/HashMap;)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;-><init>(Landroidx/compose/foundation/lazy/layout/MutableIntervalList;Landroidx/compose/runtime/internal/ComposableLambdaImpl;Lkotlin/ranges/IntRange;)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->Item(ILandroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getContentType(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getItemCount()I
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getKey(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><init>(IILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;)V
-HSPLandroidx/compose/foundation/lazy/layout/IntervalListKt;->access$binarySearch(ILandroidx/compose/runtime/collection/MutableVector;)I
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolder;Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(ILjava/lang/Object;)Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContentType(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->areCompatible(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->getSlotsToRetain(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;-><init>(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayout(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(JI)Ljava/util/List;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;-><init>(IJ)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->cancel()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->doFrame(J)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->run()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->schedulePrefetch-0kLqBqw(JI)Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;->rememberLazyNearestItemsRangeState(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Lkotlin/jvm/functions/Function3;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;)V
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->forEach(IILandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;)V
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getSize()I
-HSPLandroidx/compose/foundation/relocation/AndroidBringIntoViewParent;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/foundation/relocation/AndroidBringIntoViewParent;->bringChildIntoView(Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewChildModifier;-><init>(Landroidx/compose/foundation/relocation/AndroidBringIntoViewParent;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewChildModifier;->getLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewChildModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewChildModifier;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;-><clinit>()V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;-><init>()V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;-><clinit>()V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;-><init>()V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->bringIntoView(Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterModifier$bringIntoView$2;-><init>(Landroidx/compose/ui/geometry/Rect;Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterModifier$bringIntoView$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;-><init>(Landroidx/compose/foundation/relocation/AndroidBringIntoViewParent;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponder;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt;->bringIntoViewResponder(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewResponder;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$1$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$2;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$parentRect$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$parentRect$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;-><init>(Landroidx/compose/foundation/relocation/AndroidBringIntoViewParent;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->access$bringChildIntoView$localRect(Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->bringChildIntoView(Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;->rememberDefaultBringIntoViewParent(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/relocation/AndroidBringIntoViewParent;
-HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;-><clinit>()V
-HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;-><init>()V
-HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/shape/CornerBasedShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V
-HSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline;
-HSPLandroidx/compose/foundation/shape/DpCornerSize;-><init>(F)V
-HSPLandroidx/compose/foundation/shape/PercentCornerSize;-><init>(F)V
-HSPLandroidx/compose/foundation/shape/PercentCornerSize;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/shape/PercentCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F
-HSPLandroidx/compose/foundation/shape/RoundedCornerShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V
-HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->createOutline-LjSzlW0(JFFFFLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/graphics/Outline;
-HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;-><clinit>()V
-HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-4YKlhWE$$inlined$Layout$1;-><init>(Landroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;)V
-HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-4YKlhWE$$inlined$Layout$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-BpD7jsM(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZILandroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;-><init>(IILandroidx/compose/ui/text/TextStyle;)V
-HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt;->validateMinMaxLines(II)V
-HSPLandroidx/compose/foundation/text/TextController$coreModifiers$1;-><init>(Landroidx/compose/foundation/text/TextController;)V
-HSPLandroidx/compose/foundation/text/TextController$coreModifiers$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1$1;-><init>(Landroidx/compose/foundation/text/TextController;)V
-HSPLandroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/foundation/text/TextController;)V
-HSPLandroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;-><init>(Landroidx/compose/foundation/text/TextController;)V
-HSPLandroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1$measure$2;-><init>(Ljava/util/ArrayList;)V
-HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1;-><init>(Landroidx/compose/foundation/text/TextController;)V
-HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I
-HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1;->maxIntrinsicWidth(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I
-HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/text/TextController;-><init>(Landroidx/compose/foundation/text/TextState;)V
-HSPLandroidx/compose/foundation/text/TextController;->onForgotten()V
-HSPLandroidx/compose/foundation/text/TextController;->onRemembered()V
-HSPLandroidx/compose/foundation/text/TextDelegate;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;IIZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)V
-HSPLandroidx/compose/foundation/text/TextDelegate;->layout-NN6Ew-U(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/TextLayoutResult;)Landroidx/compose/ui/text/TextLayoutResult;
-HSPLandroidx/compose/foundation/text/TextDelegate;->layoutIntrinsics(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/foundation/text/TextDelegateKt;->ceilToIntPx(F)I
-HSPLandroidx/compose/foundation/text/TextState$onTextLayout$1;-><clinit>()V
-HSPLandroidx/compose/foundation/text/TextState$onTextLayout$1;-><init>()V
-HSPLandroidx/compose/foundation/text/TextState;-><init>(Landroidx/compose/foundation/text/TextDelegate;J)V
-HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;-><clinit>()V
-HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;-><init>()V
-HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;-><clinit>()V
-HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->hasSelection(Landroidx/compose/foundation/text/selection/SelectionRegistrar;J)Z
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><init>(JJ)V
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;-><clinit>()V
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;-><init>()V
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;-><clinit>()V
-HSPLandroidx/compose/material3/ColorScheme$$ExternalSyntheticOutline0;->m(JLandroidx/compose/runtime/StructuralEqualityPolicy;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;
-HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;-><clinit>()V
-HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;-><init>()V
-HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/material3/TextKt$Text$1;-><clinit>()V
-HSPLandroidx/compose/material3/TextKt$Text$1;-><init>()V
-HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/TextKt;-><clinit>()V
-HSPLandroidx/compose/material3/TextKt;->Text-fLXpl1I(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
-HSPLandroidx/compose/runtime/AbstractApplier;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/AbstractApplier;->down(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/AbstractApplier;->getCurrent()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/AbstractApplier;->up()V
-HSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;-><clinit>()V
-HSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;-><init>()V
-HSPLandroidx/compose/runtime/ActualAndroid_androidKt;-><clinit>()V
-HSPLandroidx/compose/runtime/Anchor;-><init>(I)V
-HSPLandroidx/compose/runtime/Anchor;->getValid()Z
-HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;-><init>(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CancellableContinuationImpl;)V
-HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;-><init>(Landroidx/compose/runtime/BroadcastFrameClock;Lkotlin/jvm/internal/Ref$ObjectRef;)V
-HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/BroadcastFrameClock;-><init>(Landroidx/compose/runtime/Recomposer$broadcastFrameClock$1;)V
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->getHasAwaiters()Z
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->sendFrame(J)V
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;-><clinit>()V
-HSPLandroidx/compose/runtime/Composer$Companion$Empty$1;-><init>()V
-HSPLandroidx/compose/runtime/Composer$Companion;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;-><init>(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;-><init>(Landroidx/compose/runtime/ComposerImpl;IZ)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompoundHashKey$runtime_release()I
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getEffectCoroutineContext$runtime_release()Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V
-HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/Applier;Ljava/lang/String;Landroidx/compose/runtime/SlotWriter;Ljava/lang/String;Landroidx/compose/runtime/RememberManager;Ljava/lang/String;)V
-HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Anchor;I)V
-HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;-><init>(ILandroidx/compose/runtime/Anchor;)V
-HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$1;-><init>(IILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$2;-><init>(IILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$3;-><init>(Landroidx/compose/runtime/ComposerImpl;)V
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$4;-><init>(Landroidx/compose/runtime/ComposerImpl;)V
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$5;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/ComposerImpl;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$5;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$37$$inlined$sortBy$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$37$$inlined$sortBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;-><init>([Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;-><init>(I)V
-HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;-><init>(I)V
-HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;-><init>(Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/Anchor;)V
-HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;-><init>(Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/Anchor;Ljava/util/ArrayList;)V
-HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;-><init>(Landroidx/compose/runtime/Anchor;)V
-HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;-><init>([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)V
-HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;-><init>(ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl;-><init>(Landroidx/compose/runtime/AbstractApplier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/HashSet;Ljava/util/ArrayList;Ljava/util/ArrayList;Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->buildContext()Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;
-HSPLandroidx/compose/runtime/ComposerImpl;->changed(I)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->changed(J)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->changed(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->changed(Z)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->changedInstance(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->cleanUpCompose()V
-HSPLandroidx/compose/runtime/ComposerImpl;->composeContent$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl;->createNode(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope(Ljava/lang/Integer;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/ComposerImpl;->deactivateToEndGroup(Z)V
-HSPLandroidx/compose/runtime/ComposerImpl;->disableReusing()V
-HSPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/compose/runtime/collection/IdentityArrayMap;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V
-HSPLandroidx/compose/runtime/ComposerImpl;->enableReusing()V
-HSPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V
-HSPLandroidx/compose/runtime/ComposerImpl;->endNode()V
-HSPLandroidx/compose/runtime/ComposerImpl;->endProviders()V
-HSPLandroidx/compose/runtime/ComposerImpl;->endReplaceableGroup()V
-HSPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/RecomposeScopeImpl;
-HSPLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V
-HSPLandroidx/compose/runtime/ComposerImpl;->endRoot()V
-HSPLandroidx/compose/runtime/ComposerImpl;->enterGroup(ZLandroidx/compose/runtime/Pending;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->getApplier()Landroidx/compose/runtime/Applier;
-HSPLandroidx/compose/runtime/ComposerImpl;->getApplyCoroutineContext()Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/runtime/ComposerImpl;->getCompoundKeyHash()I
-HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl;
-HSPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z
-HSPLandroidx/compose/runtime/ComposerImpl;->getInserting()Z
-HSPLandroidx/compose/runtime/ComposerImpl;->getRecomposeScope()Landroidx/compose/runtime/RecomposeScopeImpl;
-HSPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z
-HSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl;->realizeDowns$1()V
-HSPLandroidx/compose/runtime/ComposerImpl;->realizeMovement()V
-HSPLandroidx/compose/runtime/ComposerImpl;->realizeOperationLocation(Z)V
-HSPLandroidx/compose/runtime/ComposerImpl;->realizeUps()V
-HSPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V
-HSPLandroidx/compose/runtime/ComposerImpl;->record(Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordDelete()V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordRemoveNode(II)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordSideEffect(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotEditing()V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotTableOperation(ZLkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordUp()V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordUsed(Landroidx/compose/runtime/RecomposeScope;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->rememberedValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I
-HSPLandroidx/compose/runtime/ComposerImpl;->skipReaderToGroupEnd()V
-HSPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V
-HSPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(IILjava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V
-HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILandroidx/compose/runtime/OpaqueKey;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startNode()V
-HSPLandroidx/compose/runtime/ComposerImpl;->startProviders([Landroidx/compose/runtime/ProvidedValue;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startReaderGroup(Ljava/lang/Object;Z)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startReplaceableGroup(I)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/ComposerImpl;
-HSPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startReusableNode()V
-HSPLandroidx/compose/runtime/ComposerImpl;->startRoot()V
-HSPLandroidx/compose/runtime/ComposerImpl;->tryImminentInvalidation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroupKeyHash(I)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCount(II)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCountOverrides(II)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updateProviderMapGroup(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/ComposerImpl;->updateRememberedValue(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I
-HSPLandroidx/compose/runtime/ComposerImpl;->useNode()V
-HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposerKt;->access$removeRange(Ljava/util/ArrayList;II)V
-HSPLandroidx/compose/runtime/ComposerKt;->findLocation(ILjava/util/List;)I
-HSPLandroidx/compose/runtime/ComposerKt;->runtimeCheck(Z)V
-HSPLandroidx/compose/runtime/CompositionContext;-><init>()V
-HSPLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V
-HSPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V
-HSPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V
-HSPLandroidx/compose/runtime/CompositionContextKt;-><clinit>()V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;-><init>(Ljava/util/HashSet;)V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchSideEffects()V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->forgetting(Landroidx/compose/runtime/RememberObserver;)V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->remembering(Landroidx/compose/runtime/RememberObserver;)V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->sideEffect(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/CompositionImpl;-><init>(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/AbstractApplier;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked$invalidate(Landroidx/compose/runtime/CompositionImpl;ZLkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/Set;Z)V
-HSPLandroidx/compose/runtime/CompositionImpl;->applyChanges()V
-HSPLandroidx/compose/runtime/CompositionImpl;->applyChangesInLocked(Ljava/util/ArrayList;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V
-HSPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V
-HSPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V
-HSPLandroidx/compose/runtime/CompositionImpl;->composeContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V
-HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V
-HSPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z
-HSPLandroidx/compose/runtime/CompositionImpl;->invalidate$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->isComposing()Z
-HSPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z
-HSPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Landroidx/compose/runtime/collection/IdentityArraySet;)Z
-HSPLandroidx/compose/runtime/CompositionImpl;->prepareCompose(Landroidx/compose/runtime/Recomposer$performRecompose$1$1;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->recompose()Z
-HSPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Ljava/util/Set;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/CompositionKt;-><clinit>()V
-HSPLandroidx/compose/runtime/CompositionKt;->Composition(Landroidx/compose/runtime/AbstractApplier;Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/CompositionImpl;
-HSPLandroidx/compose/runtime/CompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/CompositionLocalKt;->CompositionLocalProvider([Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/CompositionLocalKt;->compositionLocalOf$default(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DynamicProvidableCompositionLocal;
-HSPLandroidx/compose/runtime/CompositionLocalKt;->compositionLocalOf(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DynamicProvidableCompositionLocal;
-HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;-><init>(Lkotlinx/coroutines/internal/ContextScope;)V
-HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V
-HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><clinit>()V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><init>()V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)I
-HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/collection/IdentityArrayMap;I)V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/DerivedSnapshotState;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->getDependencies()[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
-HSPLandroidx/compose/runtime/DisposableEffectImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V
-HSPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V
-HSPLandroidx/compose/runtime/DisposableEffectScope;-><init>()V
-HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;-><init>(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->provided$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/runtime/EffectsKt;-><clinit>()V
-HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/runtime/EffectsKt;->createCompositionCoroutineScope(Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/internal/ContextScope;
-HSPLandroidx/compose/runtime/GroupInfo;-><init>(III)V
-HSPLandroidx/compose/runtime/IntStack;-><init>()V
-HSPLandroidx/compose/runtime/IntStack;->pop()I
-HSPLandroidx/compose/runtime/IntStack;->push(I)V
-HSPLandroidx/compose/runtime/Invalidation;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V
-HSPLandroidx/compose/runtime/KeyInfo;-><init>(ILjava/lang/Object;II)V
-HSPLandroidx/compose/runtime/Latch;-><init>()V
-HSPLandroidx/compose/runtime/LaunchedEffectImpl;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V
-HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V
-HSPLandroidx/compose/runtime/LazyValueHolder;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/MonotonicFrameClock$Key;-><clinit>()V
-HSPLandroidx/compose/runtime/MonotonicFrameClock$Key;-><init>()V
-HSPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
-HSPLandroidx/compose/runtime/MonotonicFrameClockKt;->getMonotonicFrameClock(Lkotlin/coroutines/CoroutineContext;)Landroidx/compose/runtime/MonotonicFrameClock;
-HSPLandroidx/compose/runtime/MonotonicFrameClockKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/NeverEqualPolicy;-><clinit>()V
-HSPLandroidx/compose/runtime/NeverEqualPolicy;-><init>()V
-HSPLandroidx/compose/runtime/NeverEqualPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/OpaqueKey;-><init>(Ljava/lang/String;)V
-HSPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/OpaqueKey;->hashCode()I
-HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;-><init>()V
-HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;-><clinit>()V
-HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;-><init>(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;-><init>(Landroidx/compose/runtime/MonotonicFrameClock;)V
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Pending$keyMap$2;-><init>(Landroidx/compose/runtime/Pending;)V
-HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Pending;-><init>(ILjava/util/ArrayList;)V
-HSPLandroidx/compose/runtime/PrioritySet;-><init>(I)V
-HSPLandroidx/compose/runtime/PrioritySet;->add(I)V
-HSPLandroidx/compose/runtime/PrioritySet;->takeMax()I
-HSPLandroidx/compose/runtime/ProvidableCompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue;
-HSPLandroidx/compose/runtime/ProvidedValue;-><init>(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;-><init>(Landroidx/compose/runtime/CompositionImpl;)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidate()V
-HSPLandroidx/compose/runtime/Recomposer$Companion;-><init>()V
-HSPLandroidx/compose/runtime/Recomposer$RecomposerInfoImpl;-><init>()V
-HSPLandroidx/compose/runtime/Recomposer$State;-><clinit>()V
-HSPLandroidx/compose/runtime/Recomposer$State;-><init>(ILjava/lang/String;)V
-HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;-><init>(Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;-><init>(Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer$join$2;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/Recomposer$join$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;-><init>(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)V
-HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;-><init>(Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;-><init>(Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$2;-><init>(Landroidx/compose/runtime/Recomposer;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->access$invokeSuspend$fillToInsert(Ljava/util/List;Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;-><init>(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)V
-HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer;-><clinit>()V
-HSPLandroidx/compose/runtime/Recomposer;-><init>(Lkotlin/coroutines/CoroutineContext;)V
-HSPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/ControlledComposition;
-HSPLandroidx/compose/runtime/Recomposer;->access$recordComposerModificationsLocked(Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V
-HSPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-HSPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation;
-HSPLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z
-HSPLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I
-HSPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext$runtime_release()Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z
-HSPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><clinit>()V
-HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><init>()V
-HSPLandroidx/compose/runtime/SkippableUpdater;-><init>(Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/runtime/SlotReader;-><init>(Landroidx/compose/runtime/SlotTable;)V
-HSPLandroidx/compose/runtime/SlotReader;->anchor(I)Landroidx/compose/runtime/Anchor;
-HSPLandroidx/compose/runtime/SlotReader;->aux([II)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->close()V
-HSPLandroidx/compose/runtime/SlotReader;->endGroup()V
-HSPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->getGroupKey()I
-HSPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->groupSize(I)I
-HSPLandroidx/compose/runtime/SlotReader;->isNode(I)Z
-HSPLandroidx/compose/runtime/SlotReader;->node(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->nodeCount(I)I
-HSPLandroidx/compose/runtime/SlotReader;->objectKey([II)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->parent(I)I
-HSPLandroidx/compose/runtime/SlotReader;->reposition(I)V
-HSPLandroidx/compose/runtime/SlotReader;->skipGroup()I
-HSPLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V
-HSPLandroidx/compose/runtime/SlotReader;->startGroup()V
-HSPLandroidx/compose/runtime/SlotTable;-><init>()V
-HSPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I
-HSPLandroidx/compose/runtime/SlotTable;->openReader()Landroidx/compose/runtime/SlotReader;
-HSPLandroidx/compose/runtime/SlotTable;->openWriter()Landroidx/compose/runtime/SlotWriter;
-HSPLandroidx/compose/runtime/SlotTable;->ownsAnchor(Landroidx/compose/runtime/Anchor;)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->access$containsMark([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->access$groupSize([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$hasAux([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->access$isNode([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->access$locationOf(Ljava/util/ArrayList;II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$nodeCount([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$slotAnchor([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$updateGroupSize([III)V
-HSPLandroidx/compose/runtime/SlotTableKt;->access$updateNodeCount([III)V
-HSPLandroidx/compose/runtime/SlotTableKt;->countOneBits(I)I
-HSPLandroidx/compose/runtime/SlotTableKt;->search(Ljava/util/ArrayList;II)I
-HSPLandroidx/compose/runtime/SlotWriter$Companion;-><init>()V
-HSPLandroidx/compose/runtime/SlotWriter$Companion;->access$moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZ)Ljava/util/List;
-HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;-><init>(IILandroidx/compose/runtime/SlotWriter;)V
-HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z
-HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;-><clinit>()V
-HSPLandroidx/compose/runtime/SlotWriter;-><init>(Landroidx/compose/runtime/SlotTable;)V
-HSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor;
-HSPLandroidx/compose/runtime/SlotWriter;->anchorIndex(Landroidx/compose/runtime/Anchor;)I
-HSPLandroidx/compose/runtime/SlotWriter;->auxIndex([II)I
-HSPLandroidx/compose/runtime/SlotWriter;->beginInsert()V
-HSPLandroidx/compose/runtime/SlotWriter;->close()V
-HSPLandroidx/compose/runtime/SlotWriter;->dataIndex([II)I
-HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I
-HSPLandroidx/compose/runtime/SlotWriter;->endGroup()V
-HSPLandroidx/compose/runtime/SlotWriter;->endInsert()V
-HSPLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I
-HSPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I
-HSPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I
-HSPLandroidx/compose/runtime/SlotWriter;->insertGroups(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->insertSlots(II)V
-HSPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;)V
-HSPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;I)V
-HSPLandroidx/compose/runtime/SlotWriter;->moveGroupGapTo(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->moveSlotGapTo(II)V
-HSPLandroidx/compose/runtime/SlotWriter;->node(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;->parent(I)I
-HSPLandroidx/compose/runtime/SlotWriter;->parent([II)I
-HSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V
-HSPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z
-HSPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z
-HSPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V
-HSPLandroidx/compose/runtime/SlotWriter;->set(ILjava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;->skipGroup()I
-HSPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V
-HSPLandroidx/compose/runtime/SlotWriter;->slot(II)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;->slotIndex([II)I
-HSPLandroidx/compose/runtime/SlotWriter;->startGroup()V
-HSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;ZLjava/lang/Object;)V
-HSPLandroidx/compose/runtime/SlotWriter;->update(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;-><clinit>()V
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;-><init>(Ljava/util/LinkedHashSet;)V
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;-><init>(Lkotlinx/coroutines/channels/AbstractChannel;)V
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotThreadLocal;-><init>()V
-HSPLandroidx/compose/runtime/SnapshotThreadLocal;->get()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotThreadLocal;->set(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/Stack;-><init>()V
-HSPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Stack;->push(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->provided$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/runtime/StaticValueHolder;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/StructuralEqualityPolicy;-><clinit>()V
-HSPLandroidx/compose/runtime/StructuralEqualityPolicy;-><init>()V
-HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;-><init>()V
-HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(ILjava/lang/Object;)I
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;-><init>()V
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->find(Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->set(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;-><init>()V
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->add(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->clear()V
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->contains(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->find(Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->get(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->remove(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;-><init>()V
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->add(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->contains(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->find(Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->removeScope(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->scopeSetAt(I)Landroidx/compose/runtime/collection/IdentityArraySet;
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;-><init>(Landroidx/compose/runtime/collection/MutableVector;)V
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->indexOf(Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->isEmpty()Z
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator;
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->size()I
-HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;-><init>(ILjava/util/List;)V
-HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z
-HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/MutableVector;-><init>([Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/collection/MutableVector;->add(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)V
-HSPLandroidx/compose/runtime/collection/MutableVector;->asMutableList()Ljava/util/List;
-HSPLandroidx/compose/runtime/collection/MutableVector;->clear()V
-HSPLandroidx/compose/runtime/collection/MutableVector;->contains(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/MutableVector;->ensureCapacity(I)V
-HSPLandroidx/compose/runtime/collection/MutableVector;->isEmpty()Z
-HSPLandroidx/compose/runtime/collection/MutableVector;->isNotEmpty()Z
-HSPLandroidx/compose/runtime/collection/MutableVector;->remove(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/MutableVector;->removeAt(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/MutableVector;->removeRange(II)V
-HSPLandroidx/compose/runtime/collection/MutableVectorKt;->access$checkIndex(ILjava/util/List;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;->persistentHashMapOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><clinit>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><init>([Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->indexOf(Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getKey()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><clinit>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->builder()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->containsKey(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->ensureNextEntryIsReady()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->hasNext()Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->moveToNextNodeWithData(I)I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->next()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->build$1()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->putAll(Ljava/util/Map;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setSize(I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->getSize()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->iterator()Ljava/util/Iterator;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntriesIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><clinit>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><init>(II[Ljava/lang/Object;Landroidx/lifecycle/runtime/R$id;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILandroidx/lifecycle/runtime/R$id;)[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(IILjava/lang/Object;)Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->elementsIdentityEquals(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$runtime_release(I)I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(IILjava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$runtime_release(I)Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;ILandroidx/lifecycle/runtime/R$id;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePut(ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAll(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeAtIndex$runtime_release(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$runtime_release(I)I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(IILjava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->next()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><clinit>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><init>(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->add(Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;-><init>(I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;->checkElementIndex$runtime_release(II)V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;I)V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;I)V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;-><init>(IZ)V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Lkotlin/jvm/internal/Lambda;)V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->bitsForSlot(II)I
-HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->composableLambda(Landroidx/compose/runtime/Composer;ILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->composableLambdaInstance(ILkotlin/jvm/internal/Lambda;Z)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScope;)Z
-HSPLandroidx/compose/runtime/internal/ThreadMap;-><init>(I[J[Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I
-HSPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap;
-HSPLandroidx/compose/runtime/internal/ThreadMapKt;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;-><init>(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;)V
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;->canBeSaved(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;-><init>(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->saveTo(Ljava/util/Map;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(I)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;-><init>(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->canBeSaved(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map;
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->registerProvider(Ljava/lang/String;Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->save(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaverKt;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->dispose()V
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->notifyObjectsInitialized$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Ljava/util/Set;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadOnly()Z
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteObserver$runtime_release()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->innerApplyLocked$runtime_release(ILjava/util/HashMap;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setModified(Ljava/util/HashSet;)V
-HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->dispose()V
-HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;-><init>(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->observe(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/Snapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeAndReleasePinning$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeLocked$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->dispose()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->getId()I
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><init>(JJI[I)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->andNot(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->clear(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/HashMap;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->addRange(IILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwritableRecord(Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->writableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setList$runtime_release(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->get(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$clearObsoleteStateReads(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordInvalidation(Ljava/util/Set;)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$observeReads$1$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$observeReads$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->ensureMap(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
-HSPLandroidx/compose/runtime/snapshots/StateRecord;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;-><init>(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot;
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getId()I
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getReadOnly()Z
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->notifyObjectsInitialized$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
-HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;-><clinit>()V
-HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;-><init>()V
-HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;-><clinit>()V
-HSPLandroidx/compose/ui/Alignment$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/BiasAlignment$Horizontal;-><init>(F)V
-HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I
-HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/BiasAlignment$Vertical;-><init>(F)V
-HSPLandroidx/compose/ui/BiasAlignment$Vertical;->align(II)I
-HSPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/BiasAlignment;-><init>(FF)V
-HSPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J
-HSPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/CombinedModifier;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;)V
-HSPLandroidx/compose/ui/CombinedModifier;->all(Lkotlin/jvm/functions/Function1;)Z
-HSPLandroidx/compose/ui/CombinedModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/CombinedModifier;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/ComposedModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;-><clinit>()V
-HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;-><init>()V
-HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;-><init>(Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/ComposedModifierKt;->composed(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/ComposedModifierKt;->materialize(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/Modifier$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/Modifier$Companion;-><init>()V
-HSPLandroidx/compose/ui/Modifier$Companion;->all(Lkotlin/jvm/functions/Function1;)Z
-HSPLandroidx/compose/ui/Modifier$Companion;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/Modifier$Element;->all(Lkotlin/jvm/functions/Function1;)Z
-HSPLandroidx/compose/ui/Modifier$Element;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/Modifier$Node;-><init>()V
-HSPLandroidx/compose/ui/Modifier$Node;->detach$ui_release()V
-HSPLandroidx/compose/ui/Modifier$Node;->getNode()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/Modifier$Node;->onAttach()V
-HSPLandroidx/compose/ui/Modifier$Node;->onDetach()V
-HSPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/MotionDurationScale$Key;-><clinit>()V
-HSPLandroidx/compose/ui/MotionDurationScale$Key;-><init>()V
-HSPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
-HSPLandroidx/compose/ui/ZIndexModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/ZIndexModifier;)V
-HSPLandroidx/compose/ui/ZIndexModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/ZIndexModifier;-><init>()V
-HSPLandroidx/compose/ui/ZIndexModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/ZIndexModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/autofill/AndroidAutofill;-><init>(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V
-HSPLandroidx/compose/ui/autofill/AutofillCallback;-><clinit>()V
-HSPLandroidx/compose/ui/autofill/AutofillCallback;-><init>()V
-HSPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V
-HSPLandroidx/compose/ui/autofill/AutofillTree;-><init>()V
-HSPLandroidx/compose/ui/draw/CacheDrawScope;-><init>()V
-HSPLandroidx/compose/ui/draw/CacheDrawScope;->getDensity()F
-HSPLandroidx/compose/ui/draw/CacheDrawScope;->getSize-NH-jbRc()J
-HSPLandroidx/compose/ui/draw/ClipKt;->clip(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/draw/ClipKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/ui/draw/DrawContentCacheModifier;-><init>(Landroidx/compose/ui/draw/CacheDrawScope;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/draw/DrawContentCacheModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/ui/draw/DrawContentCacheModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/draw/DrawContentCacheModifier;->onBuildCache(Landroidx/compose/ui/node/BackwardsCompatNode;)V
-HSPLandroidx/compose/ui/draw/DrawModifierKt$drawBehind$$inlined$modifierElementOf$1;-><init>(Landroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;Landroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;Landroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;)V
-HSPLandroidx/compose/ui/draw/DrawModifierKt$drawBehind$$inlined$modifierElementOf$1;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/draw/DrawModifierKt$drawBehind$$inlined$modifierElementOf$1;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/draw/DrawModifierKt$drawWithCache$2;-><init>(Landroidx/compose/foundation/BorderKt$border$2$1;)V
-HSPLandroidx/compose/ui/draw/DrawModifierKt$drawWithCache$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/draw/DrawResult;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;-><clinit>()V
-HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;-><init>()V
-HSPLandroidx/compose/ui/draw/PainterModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/ui/draw/PainterModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/draw/PainterModifier;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V
-HSPLandroidx/compose/ui/draw/PainterModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/ui/draw/PainterModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/draw/PainterModifier;->getUseIntrinsicSize()Z
-HSPLandroidx/compose/ui/draw/PainterModifier;->hasSpecifiedAndFiniteHeight-uvyYCjk(J)Z
-HSPLandroidx/compose/ui/draw/PainterModifier;->hasSpecifiedAndFiniteWidth-uvyYCjk(J)Z
-HSPLandroidx/compose/ui/draw/PainterModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/draw/PainterModifier;->modifyConstraints-ZezNO4M(J)J
-HSPLandroidx/compose/ui/focus/BeyondBoundsLayoutKt;->searchBeyondBounds--OM-vw8(Landroidx/compose/ui/focus/FocusTargetModifierNode;ILkotlin/jvm/functions/Function1;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$modifierElementOf$2;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt;->onFocusChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusChangedModifierNode;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusChangedModifierNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V
-HSPLandroidx/compose/ui/focus/FocusDirection;-><init>(I)V
-HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusStateImpl;
-HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;-><init>(Landroidx/compose/ui/focus/FocusInvalidationManager;)V
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/LinkedHashSet;Ljava/lang/Object;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;-><init>(Landroidx/compose/ui/focus/FocusTargetModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl$special$$inlined$modifierElementOf$2;-><init>(Landroidx/compose/ui/focus/FocusOwnerImpl;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl$special$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->dispatchKeyEvent-ZmokQxo(Landroid/view/KeyEvent;)Z
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getModifier()Landroidx/compose/ui/focus/FocusOwnerImpl$special$$inlined$modifierElementOf$2;
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->moveFocus-3ESFkO8(I)Z
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->takeFocus()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$exit$1;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$exit$1;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setCanFocus(Z)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$modifierElementOf$2;-><init>(Lkotlin/jvm/internal/Lambda;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$modifierElementOf$2;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifierNodeImpl;->modifyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V
-HSPLandroidx/compose/ui/focus/FocusRequester;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusRequester;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusRequester;->findFocusTarget$ui_release(Lkotlin/jvm/functions/Function1;)Ljava/lang/Boolean;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Landroidx/compose/ui/focus/FocusRequester;Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$$inlined$modifierElementOf$2;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;-><init>(Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;->onAttach()V
-HSPLandroidx/compose/ui/focus/FocusStateImpl;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusStateImpl;-><init>(ILjava/lang/String;)V
-HSPLandroidx/compose/ui/focus/FocusStateImpl;->getHasFocus()Z
-HSPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode$special$$inlined$modifierElementOf$2;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode$special$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;->fetchFocusProperties$ui_release()Landroidx/compose/ui/focus/FocusPropertiesImpl;
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;->invalidateFocus$ui_release()V
-HSPLandroidx/compose/ui/focus/FocusTransactionsKt$grantFocus$1;-><init>(Landroidx/compose/ui/focus/FocusTargetModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusTransactionsKt$grantFocus$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->clearFocus(Landroidx/compose/ui/focus/FocusTargetModifierNode;ZZ)Z
-HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->grantFocus(Landroidx/compose/ui/focus/FocusTargetModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->requestFocus(Landroidx/compose/ui/focus/FocusTargetModifierNode;)Z
-HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->requestFocusForChild(Landroidx/compose/ui/focus/FocusTargetModifierNode;Landroidx/compose/ui/focus/FocusTargetModifierNode;)Z
-HSPLandroidx/compose/ui/focus/FocusTraversalKt;->findActiveFocusNode(Landroidx/compose/ui/focus/FocusTargetModifierNode;)Landroidx/compose/ui/focus/FocusTargetModifierNode;
-HSPLandroidx/compose/ui/focus/FocusTraversalKt;->focusRect(Landroidx/compose/ui/focus/FocusTargetModifierNode;)Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/compose/ui/focus/FocusTraversalKt;->getActiveChild(Landroidx/compose/ui/focus/FocusTargetModifierNode;)Landroidx/compose/ui/focus/FocusTargetModifierNode;
-HSPLandroidx/compose/ui/focus/FocusTraversalKt;->isEligibleForFocusSearch(Landroidx/compose/ui/focus/FocusTargetModifierNode;)Z
-HSPLandroidx/compose/ui/focus/TwoDimensionalFocusSearchKt$generateAndSearchChildren$1;-><init>(Landroidx/compose/ui/focus/FocusTargetModifierNode;Landroidx/compose/ui/focus/FocusTargetModifierNode;ILkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/TwoDimensionalFocusSearchKt$generateAndSearchChildren$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/TwoDimensionalFocusSearchKt;->beamBeats-I7lrPNg(Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;I)Z
-HSPLandroidx/compose/ui/focus/TwoDimensionalFocusSearchKt;->beamBeats_I7lrPNg$inSourceBeam(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)Z
-HSPLandroidx/compose/ui/focus/TwoDimensionalFocusSearchKt;->collectAccessibleChildren(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/runtime/collection/MutableVector;)V
-HSPLandroidx/compose/ui/focus/TwoDimensionalFocusSearchKt;->findBestCandidate-4WY_MpI(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/geometry/Rect;I)Landroidx/compose/ui/focus/FocusTargetModifierNode;
-HSPLandroidx/compose/ui/focus/TwoDimensionalFocusSearchKt;->findChildCorrespondingToFocusEnter--OM-vw8(Landroidx/compose/ui/focus/FocusTargetModifierNode;ILkotlin/jvm/functions/Function1;)Z
-HSPLandroidx/compose/ui/focus/TwoDimensionalFocusSearchKt;->generateAndSearchChildren-4C6V_qg(Landroidx/compose/ui/focus/FocusTargetModifierNode;Landroidx/compose/ui/focus/FocusTargetModifierNode;ILkotlin/jvm/functions/Function1;)Z
-HSPLandroidx/compose/ui/focus/TwoDimensionalFocusSearchKt;->isBetterCandidate_I7lrPNg$isCandidate(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)Z
-HSPLandroidx/compose/ui/focus/TwoDimensionalFocusSearchKt;->isBetterCandidate_I7lrPNg$weightedDistance(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)J
-HSPLandroidx/compose/ui/focus/TwoDimensionalFocusSearchKt;->searchChildren-4C6V_qg(Landroidx/compose/ui/focus/FocusTargetModifierNode;Landroidx/compose/ui/focus/FocusTargetModifierNode;ILkotlin/jvm/functions/Function1;)Z
-HSPLandroidx/compose/ui/focus/TwoDimensionalFocusSearchKt;->twoDimensionalFocusSearch--OM-vw8(Landroidx/compose/ui/focus/FocusTargetModifierNode;ILandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;)Z
-HSPLandroidx/compose/ui/geometry/CornerRadius;-><clinit>()V
-HSPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F
-HSPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F
-HSPLandroidx/compose/ui/geometry/CornerRadiusKt;->CornerRadius(FF)J
-HSPLandroidx/compose/ui/geometry/MutableRect;-><init>()V
-HSPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z
-HSPLandroidx/compose/ui/geometry/Offset;-><clinit>()V
-HSPLandroidx/compose/ui/geometry/Offset;-><init>(J)V
-HSPLandroidx/compose/ui/geometry/Offset;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/geometry/Offset;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F
-HSPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F
-HSPLandroidx/compose/ui/geometry/OffsetKt;->Offset(FF)J
-HSPLandroidx/compose/ui/geometry/Rect;-><clinit>()V
-HSPLandroidx/compose/ui/geometry/Rect;-><init>(FFFF)V
-HSPLandroidx/compose/ui/geometry/Rect;->translate(FF)Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/compose/ui/geometry/Rect;->translate-k-4lQ0M(J)Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/compose/ui/geometry/RoundRect;-><clinit>()V
-HSPLandroidx/compose/ui/geometry/RoundRect;-><init>(FFFFJJJJ)V
-HSPLandroidx/compose/ui/geometry/RoundRectKt;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect;
-HSPLandroidx/compose/ui/geometry/Size;-><clinit>()V
-HSPLandroidx/compose/ui/geometry/Size;-><init>(J)V
-HSPLandroidx/compose/ui/geometry/Size;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/geometry/Size;->getHeight-impl(J)F
-HSPLandroidx/compose/ui/geometry/Size;->getMinDimension-impl(J)F
-HSPLandroidx/compose/ui/geometry/Size;->getWidth-impl(J)F
-HSPLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z
-HSPLandroidx/compose/ui/geometry/SizeKt;->Size(FF)J
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;-><init>()V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/AndroidPaint;)V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/AndroidPaint;)V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->setInternalCanvas(Landroid/graphics/Canvas;)V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;-><init>(Landroid/graphics/Bitmap;)V
-HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getHeight()I
-HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getWidth()I
-HSPLandroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;->setFrom-tU-YjHk(Landroid/graphics/Matrix;[F)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;-><init>(Landroid/graphics/Paint;)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->getAlpha()F
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->getColor-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColor-8_81llA(J)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->setShader(Landroid/graphics/Shader;)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStyle-k9PVt8s(I)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->Paint()Landroidx/compose/ui/graphics/AndroidPaint;
-HSPLandroidx/compose/ui/graphics/Brush;-><init>()V
-HSPLandroidx/compose/ui/graphics/CanvasHolder;-><init>()V
-HSPLandroidx/compose/ui/graphics/Color;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/Color;-><init>(J)V
-HSPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
-HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JF)J
-HSPLandroidx/compose/ui/graphics/Color;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/Color;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/graphics/Color;->getAlpha-impl(J)F
-HSPLandroidx/compose/ui/graphics/Color;->getBlue-impl(J)F
-HSPLandroidx/compose/ui/graphics/Color;->getColorSpace-impl(J)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-HSPLandroidx/compose/ui/graphics/Color;->getGreen-impl(J)F
-HSPLandroidx/compose/ui/graphics/Color;->getRed-impl(J)F
-HSPLandroidx/compose/ui/graphics/ColorKt;->Color$default(III)J
-HSPLandroidx/compose/ui/graphics/ColorKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
-HSPLandroidx/compose/ui/graphics/ColorKt;->Color(J)J
-HSPLandroidx/compose/ui/graphics/ColorKt;->toArgb-8_81llA(J)I
-HSPLandroidx/compose/ui/graphics/Float16$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/Float16;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S
-HSPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFLandroidx/compose/ui/graphics/Shape;ZI)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJI)V
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default()[F
-HSPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J
-HSPLandroidx/compose/ui/graphics/Matrix;->map-impl([FLandroidx/compose/ui/geometry/MutableRect;)V
-HSPLandroidx/compose/ui/graphics/Outline$Rectangle;-><init>(Landroidx/compose/ui/geometry/Rect;)V
-HSPLandroidx/compose/ui/graphics/Outline$Rounded;-><init>(Landroidx/compose/ui/geometry/RoundRect;)V
-HSPLandroidx/compose/ui/graphics/Outline;-><init>()V
-HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;-><init>()V
-HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline;
-HSPLandroidx/compose/ui/graphics/RectangleShapeKt;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;-><init>()V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAlpha(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAmbientShadowColor-8_81llA(J)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCameraDistance(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setClip(Z)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCompositingStrategy-aDBOjCE(I)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRenderEffect()V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationX(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationY(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationZ(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleX(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleY(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShadowElevation(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShape(Landroidx/compose/ui/graphics/Shape;)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSpotShadowColor-8_81llA(J)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTransformOrigin-__ExYCQ(J)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationX(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationY(F)V
-HSPLandroidx/compose/ui/graphics/Shadow;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/Shadow;-><init>(JJF)V
-HSPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;-><init>(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJI)V
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/graphics/SolidColor;-><init>(J)V
-HSPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(FJLandroidx/compose/ui/graphics/AndroidPaint;)V
-HSPLandroidx/compose/ui/graphics/TransformOrigin;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionY-impl(J)F
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;-><init>([F)V
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><init>([F)V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><init>(Ljava/lang/String;JI)V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->chromaticAdaptation([F[F[F)[F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)Landroidx/compose/ui/graphics/colorspace/Connector;
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->inverse3x3([F)[F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3([F[F)[F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Diag([F[F)[F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3([F[F)V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_0([FFFF)F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_1([FFFF)F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_2([FFFF)F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda0;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;[F)V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J
-HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Lab;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->invoke(D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;->invoke(D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3;->invoke(D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda5;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda5;->invoke(D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda6;-><init>(D)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda7;-><init>(D)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->area([F)F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toXy$ui_graphics_release(FFF)J
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toZ$ui_graphics_release(FFF)F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
-HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDD)V
-HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;-><init>(FF)V
-HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F
-HSPLandroidx/compose/ui/graphics/colorspace/Xyz;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->clamp(F)F
-HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->getMaxValue(I)F
-HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->getMinValue(I)F
-HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->toXy$ui_graphics_release(FFF)J
-HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->toZ$ui_graphics_release(FFF)F
-HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>()V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getCanvas()Landroidx/compose/ui/graphics/Canvas;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getSize-NH-jbRc()J
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->setSize-uvyYCjk(J)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;-><init>()V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JLandroidx/arch/core/executor/TaskExecutor;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/arch/core/executor/TaskExecutor;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE(Landroidx/compose/ui/graphics/Brush;Landroidx/arch/core/executor/TaskExecutor;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/AndroidPaint;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/arch/core/executor/TaskExecutor;Landroidx/compose/ui/graphics/ColorFilter;II)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-AsUm42w(Landroidx/compose/ui/graphics/Brush;JJFLandroidx/arch/core/executor/TaskExecutor;Landroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/arch/core/executor/TaskExecutor;Landroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/arch/core/executor/TaskExecutor;FLandroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Landroidx/arch/core/executor/TaskExecutor;)Landroidx/compose/ui/graphics/AndroidPaint;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;-><init>(Landroidx/compose/ui/graphics/drawscope/DrawContext;)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/arch/core/executor/TaskExecutor;Landroidx/compose/ui/graphics/ColorFilter;III)V
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-AsUm42w$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJFLandroidx/arch/core/executor/TaskExecutor;I)V
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJI)V
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J
-HSPLandroidx/compose/ui/graphics/drawscope/EmptyCanvas;-><init>()V
-HSPLandroidx/compose/ui/graphics/drawscope/Fill;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/drawscope/Fill;-><init>()V
-HSPLandroidx/compose/ui/graphics/drawscope/Stroke;-><init>(FFIII)V
-HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;-><init>(Landroidx/compose/ui/graphics/ImageBitmap;)V
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->getIntrinsicSize-NH-jbRc()J
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-HSPLandroidx/compose/ui/graphics/painter/Painter;-><init>()V
-HSPLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/ui/input/InputMode;-><init>(I)V
-HSPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/input/InputModeManagerImpl;-><init>(ILandroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1;)V
-HSPLandroidx/compose/ui/input/InputModeManagerImpl;->getInputMode-aOaMEAU()I
-HSPLandroidx/compose/ui/input/key/Key;-><clinit>()V
-HSPLandroidx/compose/ui/input/key/Key;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/input/key/KeyEvent;-><init>(Landroid/view/KeyEvent;)V
-HSPLandroidx/compose/ui/input/key/KeyEvent_androidKt;->getKey-ZmokQxo(Landroid/view/KeyEvent;)J
-HSPLandroidx/compose/ui/input/key/KeyEvent_androidKt;->getType-ZmokQxo(Landroid/view/KeyEvent;)I
-HSPLandroidx/compose/ui/input/key/KeyInputInputModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/input/key/KeyInputInputModifierNodeImpl;->onKeyEvent-ZmokQxo(Landroid/view/KeyEvent;)Z
-HSPLandroidx/compose/ui/input/key/KeyInputInputModifierNodeImpl;->onPreKeyEvent-ZmokQxo(Landroid/view/KeyEvent;)Z
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$modifierElementOf$2;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/key/Key_androidKt;->Key(I)J
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$calculateNestedScrollScope$1;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;-><init>()V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt$nestedScroll$2;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt$nestedScroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$1;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getParent()Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;-><clinit>()V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;-><init>()V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/AwaitPointerEventScope;->awaitPointerEvent$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/HitPathTracker;-><init>(Landroidx/compose/ui/node/InnerNodeCoordinator;)V
-HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;-><init>()V
-HSPLandroidx/compose/ui/input/pointer/NodeParent;-><init>()V
-HSPLandroidx/compose/ui/input/pointer/PointerEvent;-><init>(Ljava/util/List;)V
-HSPLandroidx/compose/ui/input/pointer/PointerEvent;-><init>(Ljava/util/List;Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V
-HSPLandroidx/compose/ui/input/pointer/PointerEventPass;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/PointerEventPass;-><init>(ILjava/lang/String;)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;-><init>()V
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;-><init>()V
-HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;->getSize-YbymL2g()J
-HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;-><init>(I)V
-HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlinx/coroutines/CancellableContinuationImpl;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->awaitPointerEvent(Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;-><init>(Landroidx/compose/ui/platform/ViewConfiguration;Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->awaitPointerEventScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getPointerInputFilter()Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4;-><init>(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6;-><init>([Ljava/lang/Object;Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><init>()V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;-><init>()V
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$onRotaryScrollEvent$$inlined$modifierElementOf$2;-><init>()V
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$onRotaryScrollEvent$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/AlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><clinit>()V
-HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><init>()V
-HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><clinit>()V
-HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><init>()V
-HSPLandroidx/compose/ui/layout/AlignmentLineKt;-><clinit>()V
-HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;-><clinit>()V
-HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;-><init>()V
-HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;-><clinit>()V
-HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;-><clinit>()V
-HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;-><init>()V
-HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;-><clinit>()V
-HSPLandroidx/compose/ui/layout/ContentScale$Companion$FillBounds$1;-><init>()V
-HSPLandroidx/compose/ui/layout/ContentScale$Companion$Fit$1;-><init>()V
-HSPLandroidx/compose/ui/layout/ContentScale$Companion$Fit$1;->computeScaleFactor-H7hwNQA(JJ)J
-HSPLandroidx/compose/ui/layout/ContentScale$Companion$Inside$1;-><init>()V
-HSPLandroidx/compose/ui/layout/ContentScale$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/layout/IntrinsicsMeasureScope;-><init>(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/layout/IntrinsicsMeasureScope;->roundToPx-0680j_4(F)I
-HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;-><init>(Landroidx/compose/ui/Modifier;)V
-HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/LayoutKt;->materializerOf(Landroidx/compose/ui/Modifier;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
-HSPLandroidx/compose/ui/layout/LayoutModifier;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/IntrinsicMeasurable;I)I
-HSPLandroidx/compose/ui/layout/LayoutModifier;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/IntrinsicMeasurable;I)I
-HSPLandroidx/compose/ui/layout/LayoutModifierImpl;-><init>(Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/layout/LayoutModifierKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;-><init>(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getAlignmentLines()Ljava/util/Map;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getHeight()I
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getWidth()I
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->placeChildren()V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Lkotlin/jvm/functions/Function2;Ljava/lang/String;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Ljava/lang/Object;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->dispose()V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->getPlaceablesCount()I
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->premeasure-0kLqBqw(JI)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$2$1$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;-><init>(IILjava/util/Map;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getAlignmentLines()Ljava/util/Map;
-HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getHeight()I
-HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getWidth()I
-HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->placeChildren()V
-HSPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/layout/MeasuringIntrinsics$DefaultIntrinsicMeasurable;-><init>(Landroidx/compose/ui/layout/IntrinsicMeasurable;II)V
-HSPLandroidx/compose/ui/layout/MeasuringIntrinsics$DefaultIntrinsicMeasurable;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
-HSPLandroidx/compose/ui/layout/MeasuringIntrinsics$EmptyPlaceable;-><init>(II)V
-HSPLandroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;-><clinit>()V
-HSPLandroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;-><init>()V
-HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;-><init>(Landroidx/compose/foundation/text/TextController$coreModifiers$1;)V
-HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->onRemeasured-ozmzZPI(J)V
-HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;-><clinit>()V
-HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;-><init>()V
-HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/PinnableContainerKt;-><clinit>()V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;-><init>(I)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->getParentLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;-><clinit>()V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;-><init>()V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place(Landroidx/compose/ui/layout/Placeable;IIF)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50(Landroidx/compose/ui/layout/Placeable;JF)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IILkotlin/jvm/functions/Function1;I)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/Placeable;-><init>()V
-HSPLandroidx/compose/ui/layout/Placeable;->getApparentToRealOffset-nOcc-ac()J
-HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I
-HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()I
-HSPLandroidx/compose/ui/layout/Placeable;->recalculateWidthAndHeight()V
-HSPLandroidx/compose/ui/layout/Placeable;->setMeasuredSize-ozmzZPI(J)V
-HSPLandroidx/compose/ui/layout/Placeable;->setMeasurementConstraints-BRTryo0(J)V
-HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;-><clinit>()V
-HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;-><init>()V
-HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/PlaceableKt;-><clinit>()V
-HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;-><init>(Landroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><clinit>()V
-HSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><init>()V
-HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/layout/ScaleFactor;-><clinit>()V
-HSPLandroidx/compose/ui/layout/ScaleFactorKt;->ScaleFactor(FF)J
-HSPLandroidx/compose/ui/layout/ScaleFactorKt;->times-UQTWf7w(JJ)J
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;-><init>(Landroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;-><init>()V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;-><init>(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->precompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;
-HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;-><init>(I)V
-HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->clear()V
-HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->contains(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->iterator()Ljava/util/Iterator;
-HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V
-HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
-HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/modifier/EmptyMap;-><clinit>()V
-HSPLandroidx/compose/ui/modifier/EmptyMap;-><init>()V
-HSPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
-HSPLandroidx/compose/ui/modifier/ModifierLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/modifier/ModifierLocalManager;-><init>(Landroidx/compose/ui/node/Owner;)V
-HSPLandroidx/compose/ui/modifier/ModifierLocalMap;-><init>()V
-HSPLandroidx/compose/ui/modifier/ModifierLocalNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/modifier/ModifierLocalNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap;
-HSPLandroidx/compose/ui/modifier/ProvidableModifierLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/node/AlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
-HSPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z
-HSPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z
-HSPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V
-HSPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;-><init>(Landroidx/compose/ui/node/BackwardsCompatNode;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;-><init>(Landroidx/compose/ui/node/BackwardsCompatNode;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;->onLayoutComplete()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateDrawCache$1;-><init>(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/node/BackwardsCompatNode;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateDrawCache$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;-><init>(Landroidx/compose/ui/node/BackwardsCompatNode;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;-><init>(Landroidx/compose/ui/Modifier$Element;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getDensity()Landroidx/compose/ui/unit/Density;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getSemanticsConfiguration()Landroidx/compose/ui/semantics/SemanticsConfiguration;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getSize-NH-jbRc()J
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->isValid()Z
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/IntrinsicMeasurable;I)I
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/IntrinsicMeasurable;I)I
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalConsumer()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;-><init>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;-><init>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;-><init>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;-><clinit>()V
-HSPLandroidx/compose/ui/node/CanFocusChecker;-><clinit>()V
-HSPLandroidx/compose/ui/node/CanFocusChecker;-><init>()V
-HSPLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode;-><clinit>()V
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->ancestors(Landroidx/compose/ui/node/DelegatableNode;I)Ljava/util/ArrayList;
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->nearestAncestor(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner;
-HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;-><init>()V
-HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2;-><clinit>()V
-HSPLandroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2;-><init>()V
-HSPLandroidx/compose/ui/node/DepthSortedSet;-><init>()V
-HSPLandroidx/compose/ui/node/DepthSortedSet;->add(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/DepthSortedSet;->remove(Landroidx/compose/ui/node/LayoutNode;)Z
-HSPLandroidx/compose/ui/node/DrawModifierNode;->onMeasureResultChanged()V
-HSPLandroidx/compose/ui/node/DrawModifierNodeKt;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V
-HSPLandroidx/compose/ui/node/HitTestResult;-><init>()V
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator$tail$1;-><init>()V
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><clinit>()V
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->maxIntrinsicHeight(I)I
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->maxIntrinsicWidth(I)I
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/IntStack;-><init>(I)V
-HSPLandroidx/compose/ui/node/IntStack;->pop()I
-HSPLandroidx/compose/ui/node/IntStack;->pushDiagonal(III)V
-HSPLandroidx/compose/ui/node/IntStack;->pushRange(IIII)V
-HSPLandroidx/compose/ui/node/IntStack;->quickSort(II)V
-HSPLandroidx/compose/ui/node/IntStack;->swapDiagonal(II)V
-HSPLandroidx/compose/ui/node/IntrinsicsPolicy;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->measurePolicyFromState()Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/ui/node/LayerPositionalProperties;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutModifierNode;->forceRemeasure()V
-HSPLandroidx/compose/ui/node/LayoutModifierNode;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/IntrinsicMeasurable;I)I
-HSPLandroidx/compose/ui/node/LayoutModifierNode;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/IntrinsicMeasurable;I)I
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->maxIntrinsicHeight(I)I
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->maxIntrinsicWidth(I)I
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->onLayoutModifierNodeChanged()V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;-><init>(Ljava/lang/String;)V
-HSPLandroidx/compose/ui/node/LayoutNode$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNode;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNode;-><init>(IZ)V
-HSPLandroidx/compose/ui/node/LayoutNode;-><init>(IZI)V
-HSPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreePlacementIntrinsicsUsage()V
-HSPLandroidx/compose/ui/node/LayoutNode;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->forceRemeasure()V
-HSPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/util/List;
-HSPLandroidx/compose/ui/node/LayoutNode;->getChildren$ui_release()Ljava/util/List;
-HSPLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List;
-HSPLandroidx/compose/ui/node/LayoutNode;->getParent$ui_release()Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->invalidateMeasurements$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->invalidateUnfoldedVirtualChildren()V
-HSPLandroidx/compose/ui/node/LayoutNode;->isAttached()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->isValid()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->markNodeAndSubtreeAsPlaced()V
-HSPLandroidx/compose/ui/node/LayoutNode;->markSubtreeAsNotPlaced()V
-HSPLandroidx/compose/ui/node/LayoutNode;->move$ui_release(III)V
-HSPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->replace$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release(Z)V
-HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release(Z)V
-HSPLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->setDensity(Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setMeasurePolicy(Landroidx/compose/ui/layout/MeasurePolicy;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNodeAlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->draw-x_KDEd0$ui_release(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DrawModifierNode;)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawContent()V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/arch/core/executor/TaskExecutor;Landroidx/compose/ui/graphics/ColorFilter;II)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-AsUm42w(Landroidx/compose/ui/graphics/Brush;JJFLandroidx/arch/core/executor/TaskExecutor;Landroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/arch/core/executor/TaskExecutor;Landroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/arch/core/executor/TaskExecutor;FLandroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J
-HSPLandroidx/compose/ui/node/LayoutNodeKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JF)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/AlignmentLines;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/InnerNodeCoordinator;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredWidth()I
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentData()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->layoutChildren()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->maxIntrinsicHeight(I)I
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->maxIntrinsicWidth(I)I
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->notifyChildrenUsingCoordinatesWhilePlacing()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onIntrinsicsQueried()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeOuterCoordinator-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->remeasure-BRTryo0(J)Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;J)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegateKt;->access$updateChildMeasurables(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/collection/MutableVector;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;-><init>()V
-HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks(Z)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout(Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureOnly()V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/LayoutNode;)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureOnly(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V
-HSPLandroidx/compose/ui/node/ModifierNodeElement;-><init>(Ljava/lang/Object;Z)V
-HSPLandroidx/compose/ui/node/ModifierNodeElement;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;-><init>(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;)V
-HSPLandroidx/compose/ui/node/NodeChain$Differ;-><init>(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;)V
-HSPLandroidx/compose/ui/node/NodeChain$Differ;->remove()V
-HSPLandroidx/compose/ui/node/NodeChain$Differ;->same(II)V
-HSPLandroidx/compose/ui/node/NodeChain;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/NodeChain;->attach(Z)V
-HSPLandroidx/compose/ui/node/NodeChain;->createAndInsertNodeAsParent(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeChain;->structuralUpdate(Landroidx/compose/runtime/collection/MutableVector;ILandroidx/compose/runtime/collection/MutableVector;ILandroidx/compose/ui/Modifier$Node;)V
-HSPLandroidx/compose/ui/node/NodeChain;->updateNodeAndReplaceIfNeeded(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeChainKt$SentinelHead$1;-><init>()V
-HSPLandroidx/compose/ui/node/NodeChainKt;-><clinit>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;-><init>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$SemanticsSource$1;-><init>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;-><init>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;-><init>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;-><init>(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;-><init>(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator;-><clinit>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getFontScale()F
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentLayoutCoordinates()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getSize-YbymL2g()J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->invalidateLayer()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->isAttached()Z
-HSPLandroidx/compose/ui/node/NodeCoordinator;->isValid()Z
-HSPLandroidx/compose/ui/node/NodeCoordinator;->localBoundingBoxOf(Landroidx/compose/ui/layout/LayoutCoordinates;Z)Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->localToRoot-MK-Hz9U(J)J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayerBlockUpdated(Lkotlin/jvm/functions/Function1;Z)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutModifierNodeChanged()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced$1()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->rectInParent$ui_release(Landroidx/compose/ui/geometry/MutableRect;ZZ)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters()V
-HSPLandroidx/compose/ui/node/NodeKind;->spring$default(FLjava/lang/Object;I)Landroidx/compose/animation/core/SpringSpec;
-HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNode(Landroidx/compose/ui/Modifier$Node;I)V
-HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I
-HSPLandroidx/compose/ui/node/NodeKindKt;->getIncludeSelfInTraversal-H91voCI(I)Z
-HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$DefaultIntrinsicMeasurable;-><init>(Landroidx/compose/ui/layout/IntrinsicMeasurable;II)V
-HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$DefaultIntrinsicMeasurable;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
-HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$EmptyPlaceable;-><init>(II)V
-HSPLandroidx/compose/ui/node/ObserverNode$Companion$OnObserveReadsChanged$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/ObserverNode$Companion$OnObserveReadsChanged$1;-><init>()V
-HSPLandroidx/compose/ui/node/ObserverNode$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/node/ObserverNode$Companion;-><init>()V
-HSPLandroidx/compose/ui/node/ObserverNode;-><clinit>()V
-HSPLandroidx/compose/ui/node/ObserverNodeKt;->observeReads(Landroidx/compose/ui/Modifier$Node;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><clinit>()V
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><init>()V
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher;-><init>()V
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;-><init>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;-><init>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;-><init>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;)V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeReads$ui_release(Landroidx/compose/ui/node/OwnerScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/node/Ref;-><init>()V
-HSPLandroidx/compose/ui/node/SemanticsModifierNodeKt;->collapsedSemanticsConfiguration(Landroidx/compose/ui/node/SemanticsModifierNode;)Landroidx/compose/ui/semantics/SemanticsConfiguration;
-HSPLandroidx/compose/ui/node/Snake;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/ui/node/Snake;->getDiagonalSize-impl([I)I
-HSPLandroidx/compose/ui/node/Snake;->newInstance(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/ui/node/TreeSet;-><init>(Landroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;)V
-HSPLandroidx/compose/ui/node/UiApplier;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V
-HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AbstractComposeView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->checkAddView()V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnLayout$ui_release(ZIIII)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnMeasure$ui_release(II)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->isAlive(Landroidx/compose/runtime/CompositionContext;)Z
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->onAttachedToWindow()V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->onLayout(ZIIII)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->onMeasure(II)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->onRtlPropertiesChanged(I)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->resolveParentCompositionContext()Landroidx/compose/runtime/CompositionContext;
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentCompositionContext(Landroidx/compose/runtime/CompositionContext;)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentContext(Landroidx/compose/runtime/CompositionContext;)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->setPreviousAttachedWindowToken(Landroid/os/IBinder;)V
-HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/platform/AndroidClipboardManager;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda0;->onGlobalLayout()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;->onTouchModeChanged(Z)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->access$getIsShowingLayoutBounds()Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;-><init>(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec(I)Lkotlin/Pair;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->createLayer(Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/OwnedLayer;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AccessibilityManager;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofill()Landroidx/compose/ui/autofill/Autofill;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/ClipboardManager;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getDensity()Landroidx/compose/ui/unit/Density;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusOwner()Landroidx/compose/ui/focus/FocusOwner;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontLoader()Landroidx/compose/ui/text/font/Font$ResourceLoader;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getHapticFeedBack()Landroidx/compose/ui/hapticfeedback/HapticFeedback;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getInputModeManager()Landroidx/compose/ui/input/InputModeManager;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getPointerIconService()Landroidx/compose/ui/input/pointer/PointerIconService;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getRoot()Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSemanticsOwner()Landroidx/compose/ui/semantics/SemanticsOwner;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSharedDrawScope()Landroidx/compose/ui/node/LayoutNodeDrawScope;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getShowLayoutBounds()Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextInputService()Landroidx/compose/ui/text/input/TextInputService;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextToolbar()Landroidx/compose/ui/platform/TextToolbar;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getView()Landroid/view/View;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfo;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttach(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttachedToWindow()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onCheckIsTextEditor()Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDraw(Landroid/graphics/Canvas;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onEndApplyChanges()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onFocusChanged(ZILandroid/graphics/Rect;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayout(ZIIII)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayoutChange(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onMeasure(II)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestMeasure(Landroidx/compose/ui/node/LayoutNode;ZZ)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestRelayout(Landroidx/compose/ui/node/LayoutNode;ZZ)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnEndApplyChangesListener(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnLayoutCompletedListener(Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->setConfigurationChangeObserver(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->setOnViewTreeOwnersAvailable(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->setShowLayoutBounds(Z)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->setViewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->updatePositionCacheAndDispatch()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;-><init>(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabled$ui_release()Z
-HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;-><init>(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/ui/platform/AndroidUriHandler;Lkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;-><init>(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;-><init>(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;-><init>(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/platform/AndroidFontResourceLoader;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/platform/AndroidTextToolbar;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;-><init>(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->doFrame(J)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->run()V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><init>(Landroid/view/Choreographer;Landroid/os/Handler;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher_androidKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$1;-><init>(Landroidx/compose/ui/platform/AndroidUiDispatcher;Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;)V
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;-><init>(Landroid/view/Choreographer;)V
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidUriHandler;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;-><init>(Landroid/view/ViewConfiguration;)V
-HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;-><init>()V
-HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;-><init>()V
-HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/ComposeView$Content$1;-><init>(Landroidx/compose/ui/platform/ComposeView;I)V
-HSPLandroidx/compose/ui/platform/ComposeView;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z
-HSPLandroidx/compose/ui/platform/ComposeView;->setContent(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;-><init>(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->ProvideCommonCompositionLocals(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;)V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->canBeSaved(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->registerProvider(Ljava/lang/String;Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;-><init>(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;)V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;-><init>()V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->canBeSavedToBundle(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;-><init>(Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;-><init>(Lkotlinx/coroutines/channels/AbstractChannel;)V
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;-><clinit>()V
-HSPLandroidx/compose/ui/platform/InspectableModifier$End;-><init>()V
-HSPLandroidx/compose/ui/platform/InspectableModifier;-><init>()V
-HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;-><init>()V
-HSPLandroidx/compose/ui/platform/InspectorValueInfo;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/platform/LayerMatrixCache;-><init>(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F
-HSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V
-HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;-><init>()V
-HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->getScaleFactor()F
-HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/ui/platform/OutlineResolver;-><init>(Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline;
-HSPLandroidx/compose/ui/platform/OutlineResolver;->update(Landroidx/compose/ui/graphics/Shape;FZFLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Z
-HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCache()V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;Landroid/graphics/RenderNode;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->discardDisplayList()V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->drawInto(Landroid/graphics/Canvas;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getAlpha()F
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToOutline()Z
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getElevation()F
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHasDisplayList()Z
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHeight()I
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getLeft()I
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getTop()I
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getWidth()I
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetLeftAndRight(I)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetTopAndBottom(I)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->record(Landroidx/compose/ui/graphics/CanvasHolder;Landroidx/compose/ui/graphics/Path;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAlpha(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAmbientShadowColor(I)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCameraDistance(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToBounds(Z)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToOutline(Z)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCompositingStrategy-aDBOjCE(I)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setElevation(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setHasOverlappingRendering()Z
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setOutline(Landroid/graphics/Outline;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotX(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotY(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPosition(IIII)Z
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRenderEffect()V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationX(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationY(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationZ(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleX(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleY(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setSpotShadowColor(I)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationX(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationY(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;-><clinit>()V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;-><init>()V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->setRenderEffect(Landroid/graphics/RenderNode;Landroidx/compose/ui/graphics/RenderEffect;)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;-><init>()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->destroy()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapBounds(Landroidx/compose/ui/geometry/MutableRect;Z)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->reuseLayer(Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-dDxr-wY(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;)V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;)V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->onViewAttachedToWindow(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;-><init>()V
-HSPLandroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;-><init>()V
-HSPLandroidx/compose/ui/platform/ViewLayer;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WeakCache;-><init>()V
-HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><init>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;-><init>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->createRecomposer(Landroid/view/View;)Landroidx/compose/runtime/Recomposer;
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;-><init>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;-><init>(Lkotlinx/coroutines/StandaloneCoroutine;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroid/view/View;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;-><init>(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;-><init>(Landroidx/compose/ui/platform/MotionDurationScaleImpl;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;-><init>(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/runtime/Recomposer;Landroidx/lifecycle/LifecycleOwner;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;Landroid/view/View;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;-><init>(Lkotlinx/coroutines/internal/ContextScope;Landroidx/compose/runtime/PausableMonotonicFrameClock;Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/internal/Ref$ObjectRef;Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;-><init>(Landroid/content/ContentResolver;Landroid/net/Uri;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;Lkotlinx/coroutines/channels/Channel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;-><init>(Lkotlinx/coroutines/channels/AbstractChannel;Landroid/os/Handler;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$3;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WrappedComposition;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionImpl;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition;->setContent(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;-><init>()V
-HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Ljava/util/Map;
-HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;-><init>()V
-HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map;
-HSPLandroidx/compose/ui/platform/Wrapper_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)Landroidx/compose/runtime/Composition;
-HSPLandroidx/compose/ui/res/ImageVectorCache;-><init>()V
-HSPLandroidx/compose/ui/res/PainterResources_androidKt;->painterResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/painter/Painter;
-HSPLandroidx/compose/ui/semantics/AccessibilityAction;-><init>(Ljava/lang/String;Lkotlin/Function;)V
-HSPLandroidx/compose/ui/semantics/AccessibilityAction;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/semantics/CollectionInfo;-><init>(II)V
-HSPLandroidx/compose/ui/semantics/Role;-><init>(I)V
-HSPLandroidx/compose/ui/semantics/Role;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/semantics/ScrollAxisRange;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V
-HSPLandroidx/compose/ui/semantics/SemanticsActions;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->set(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Ljava/lang/Object;)V
-HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;-><init>(ZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->getSemanticsConfiguration()Landroidx/compose/ui/semantics/SemanticsConfiguration;
-HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/semantics/SemanticsNode;-><init>(Landroidx/compose/ui/node/SemanticsModifierNode;ZLandroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(Z)Ljava/util/List;
-HSPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z
-HSPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(ZZ)Ljava/util/List;
-HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->findOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/List;)V
-HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode;
-HSPLandroidx/compose/ui/semantics/SemanticsOwner;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$Role$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$Role$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$Text$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$Text$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setRole-kuIjeqM(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->setValue(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V
-HSPLandroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;-><init>(Landroidx/compose/ui/text/AndroidParagraph;)V
-HSPLandroidx/compose/ui/text/AndroidParagraph;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V
-HSPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout;
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getFirstBaseline()F
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getLastBaseline()F
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getPlaceholderRects()Ljava/util/List;
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getWidth()F
-HSPLandroidx/compose/ui/text/AndroidParagraph;->paint(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/text/AndroidParagraph;->paint-iJQMabo(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Landroidx/arch/core/executor/TaskExecutor;)V
-HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(IILjava/lang/Object;)V
-HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(Ljava/lang/Object;IILjava/lang/String;)V
-HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;)V
-HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V
-HSPLandroidx/compose/ui/text/AnnotatedString;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/AnnotatedStringKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/MultiParagraph;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;JIZ)V
-HSPLandroidx/compose/ui/text/MultiParagraph;->paint-iJQMabo(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Landroidx/arch/core/executor/TaskExecutor;)V
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;)V
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$minIntrinsicWidth$2;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;)V
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)V
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getHasStaleResolvedFonts()Z
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getMaxIntrinsicWidth()F
-HSPLandroidx/compose/ui/text/ParagraphInfo;-><init>(Landroidx/compose/ui/text/AndroidParagraph;IIIIFF)V
-HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;II)V
-HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;)V
-HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)V
-HSPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle;
-HSPLandroidx/compose/ui/text/ParagraphStyleKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;I)V
-HSPLandroidx/compose/ui/text/SpanStyle;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;)V
-HSPLandroidx/compose/ui/text/SpanStyle;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/arch/core/executor/TaskExecutor;)V
-HSPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/SpanStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;
-HSPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J
-HSPLandroidx/compose/ui/text/SpanStyle;->hasSameLayoutAffectingAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z
-HSPLandroidx/compose/ui/text/SpanStyle;->merge(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle;
-HSPLandroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;-><clinit>()V
-HSPLandroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;-><init>()V
-HSPLandroidx/compose/ui/text/SpanStyleKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/TextLayoutInput;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)V
-HSPLandroidx/compose/ui/text/TextLayoutInput;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/TextLayoutResult;-><init>(Landroidx/compose/ui/text/TextLayoutInput;Landroidx/compose/ui/text/MultiParagraph;J)V
-HSPLandroidx/compose/ui/text/TextLayoutResult;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/TextRange;-><clinit>()V
-HSPLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I
-HSPLandroidx/compose/ui/text/TextRangeKt;->TextRange(II)J
-HSPLandroidx/compose/ui/text/TextRangeKt;->constrain-8ffj60Q(IJ)J
-HSPLandroidx/compose/ui/text/TextStyle;-><clinit>()V
-HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JI)V
-HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JII)V
-HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V
-HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Lkotlin/internal/ProgressionUtilKt;)V
-HSPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/ui/text/android/BoringLayoutFactory;->create(Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/BoringLayout$Metrics;Landroid/text/Layout$Alignment;ZZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
-HSPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->create(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
-HSPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics;
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$boringMetrics$2;-><init>(ILandroidx/compose/ui/text/platform/AndroidTextPaint;Ljava/lang/CharSequence;)V
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$boringMetrics$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2;-><init>(Landroidx/compose/ui/text/android/LayoutIntrinsics;Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;)V
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$minIntrinsicWidth$2;-><init>(Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;)V
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;-><init>(ILandroidx/compose/ui/text/platform/AndroidTextPaint;Ljava/lang/CharSequence;)V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;-><init>()V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout;
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;->create(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)Landroid/text/StaticLayout;
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;-><init>(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V
-HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;-><init>()V
-HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V
-HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->getClipBounds(Landroid/graphics/Rect;)Z
-HSPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;-><init>(Landroidx/compose/ui/text/android/TextLayout;)V
-HSPLandroidx/compose/ui/text/android/TextLayout;-><init>(Ljava/lang/CharSequence;FLandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextUtils$TruncateAt;IIIIIIILandroidx/compose/ui/text/android/LayoutIntrinsics;)V
-HSPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I
-HSPLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F
-HSPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence;
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic;
-HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F
-HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F
-HSPLandroidx/compose/ui/text/android/style/LetterSpacingSpanPx;-><init>(F)V
-HSPLandroidx/compose/ui/text/android/style/LetterSpacingSpanPx;->updateDrawState(Landroid/text/TextPaint;)V
-HSPLandroidx/compose/ui/text/android/style/LetterSpacingSpanPx;->updateMeasureState(Landroid/text/TextPaint;)V
-HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;-><init>(F)V
-HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V
-HSPLandroidx/compose/ui/text/caches/ContainerHelpersKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/caches/LruCache;-><init>()V
-HSPLandroidx/compose/ui/text/caches/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/caches/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/caches/LruCache;->size()I
-HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;-><init>(I)V
-HSPLandroidx/compose/ui/text/font/AndroidFontLoader;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->getCacheKey()V
-HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;-><init>(I)V
-HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor_androidKt;->AndroidFontResolveInterceptor(Landroid/content/Context;)Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;
-HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;-><init>()V
-HSPLandroidx/compose/ui/text/font/DefaultFontFamily;-><init>()V
-HSPLandroidx/compose/ui/text/font/FontFamily;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontFamily;-><init>()V
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$createDefaultTypeface$1;-><init>(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)V
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;-><init>(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/text/font/TypefaceRequest;)V
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;-><init>(Landroidx/compose/ui/text/font/AndroidFontLoader;Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;)V
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/ui/text/font/TypefaceResult;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/ui/text/font/TypefaceResult;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;-><init>()V
-HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><init>(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)V
-HSPLandroidx/compose/ui/text/font/FontStyle;-><init>(I)V
-HSPLandroidx/compose/ui/text/font/FontSynthesis;-><init>(I)V
-HSPLandroidx/compose/ui/text/font/FontWeight;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontWeight;-><init>(I)V
-HSPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/font/GenericFontFamily;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;-><init>()V
-HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;-><init>()V
-HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;-><init>()V
-HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/font/SystemFontFamily;-><init>()V
-HSPLandroidx/compose/ui/text/font/TypefaceRequest;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V
-HSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I
-HSPLandroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1;-><init>(Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/TypefaceRequest;)V
-HSPLandroidx/compose/ui/text/font/TypefaceRequestCache;-><init>()V
-HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;-><init>(Ljava/lang/Object;Z)V
-HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getCacheable()Z
-HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/input/ImmHelper30;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;-><init>(Landroidx/compose/ui/text/input/InputMethodManagerImpl;)V
-HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;-><init>()V
-HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;-><init>()V
-HSPLandroidx/compose/ui/text/input/TextFieldValue;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V
-HSPLandroidx/compose/ui/text/input/TextInputService;-><init>(Landroidx/compose/ui/text/input/PlatformTextInputService;)V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$baseInputConnection$2;-><init>(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;-><init>(Landroidx/compose/ui/text/input/TextInputServiceAndroid;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->textInputCommandEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/intl/AndroidLocale;-><init>(Ljava/util/Locale;)V
-HSPLandroidx/compose/ui/text/intl/AndroidLocale;->toLanguageTag()Ljava/lang/String;
-HSPLandroidx/compose/ui/text/intl/Locale;-><init>(Landroidx/compose/ui/text/intl/PlatformLocale;)V
-HSPLandroidx/compose/ui/text/intl/Locale;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList;
-HSPLandroidx/compose/ui/text/intl/LocaleList;-><init>(Ljava/util/ArrayList;)V
-HSPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;-><init>()V
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;-><init>(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F
-HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;-><init>(F)V
-HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V
-HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setColor-8_81llA(J)V
-HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setDrawStyle(Landroidx/arch/core/executor/TaskExecutor;)V
-HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setShadow(Landroidx/compose/ui/graphics/Shadow;)V
-HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setTextDecoration(Landroidx/compose/ui/text/style/TextDecoration;)V
-HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;-><init>(Landroidx/compose/runtime/ParcelableSnapshotMutableState;Landroidx/compose/ui/text/platform/DefaultImpl;)V
-HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;->onInitialized()V
-HSPLandroidx/compose/ui/text/platform/DefaultImpl;-><init>()V
-HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoadState()Landroidx/compose/runtime/State;
-HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;-><clinit>()V
-HSPLandroidx/compose/ui/text/platform/ImmutableBool;-><init>(Z)V
-HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/platform/TypefaceDirtyTracker;-><init>(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpanRange;-><init>(IILandroid/text/style/MetricAffectingSpan;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;-><init>(Landroid/text/Spannable;Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setBackground-RPmYEkk(Landroid/text/Spannable;JII)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setColor-RPmYEkk(Landroid/text/Spannable;JII)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setFontSize-KmRG4DE(Landroid/text/Spannable;JLandroidx/compose/ui/unit/Density;II)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpan(Landroid/text/Spannable;Ljava/lang/Object;II)V
-HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z
-HSPLandroidx/compose/ui/text/style/BaselineShift;-><init>(F)V
-HSPLandroidx/compose/ui/text/style/ColorStyle;-><init>(J)V
-HSPLandroidx/compose/ui/text/style/ColorStyle;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/style/ColorStyle;->getAlpha()F
-HSPLandroidx/compose/ui/text/style/ColorStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;
-HSPLandroidx/compose/ui/text/style/ColorStyle;->getColor-0d7_KjU()J
-HSPLandroidx/compose/ui/text/style/Hyphens;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/Hyphens;-><init>()V
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/LineBreak;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/LineBreak;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextAlign;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/TextDecoration;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextDecoration;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/style/TextDirection;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getAlpha()F
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getBrush()Landroidx/compose/ui/graphics/Brush;
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getColor-0d7_KjU()J
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;)V
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->merge(Landroidx/compose/ui/text/style/TextForegroundStyle;)Landroidx/compose/ui/text/style/TextForegroundStyle;
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->takeOrElse(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/text/style/TextForegroundStyle;
-HSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><init>(FF)V
-HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/style/TextIndent;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextIndent;-><init>(JJ)V
-HSPLandroidx/compose/ui/text/style/TextMotion;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextMotion;-><init>(IZ)V
-HSPLandroidx/compose/ui/unit/AndroidDensity_androidKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/DensityImpl;
-HSPLandroidx/compose/ui/unit/Constraints$Companion;->bitsNeedForSize(I)I
-HSPLandroidx/compose/ui/unit/Constraints$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J
-HSPLandroidx/compose/ui/unit/Constraints$Companion;->fixed-JhjzzOo(II)J
-HSPLandroidx/compose/ui/unit/Constraints;-><clinit>()V
-HSPLandroidx/compose/ui/unit/Constraints;-><init>(J)V
-HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIII)J
-HSPLandroidx/compose/ui/unit/Constraints;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedHeight-impl(J)Z
-HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedWidth-impl(J)Z
-HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedHeight-impl(J)Z
-HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedWidth-impl(J)Z
-HSPLandroidx/compose/ui/unit/Constraints;->getMaxHeight-impl(J)I
-HSPLandroidx/compose/ui/unit/Constraints;->getMaxWidth-impl(J)I
-HSPLandroidx/compose/ui/unit/Constraints;->getMinHeight-impl(J)I
-HSPLandroidx/compose/ui/unit/Constraints;->getMinWidth-impl(J)I
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->Constraints$default(III)J
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->Constraints(IIII)J
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrain-4WqzIAM(JJ)J
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrainHeight-K40F9xA(JI)I
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrainWidth-K40F9xA(JI)I
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->offset-NN6Ew-U(IIJ)J
-HSPLandroidx/compose/ui/unit/Density;->roundToPx-0680j_4(F)I
-HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F
-HSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F
-HSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F
-HSPLandroidx/compose/ui/unit/DensityImpl;-><init>(FF)V
-HSPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F
-HSPLandroidx/compose/ui/unit/DensityImpl;->getFontScale()F
-HSPLandroidx/compose/ui/unit/Dp;-><init>(F)V
-HSPLandroidx/compose/ui/unit/Dp;->compareTo(Ljava/lang/Object;)I
-HSPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z
-HSPLandroidx/compose/ui/unit/DpKt;->DpOffset-YgX7TsA(FF)J
-HSPLandroidx/compose/ui/unit/DpOffset;-><clinit>()V
-HSPLandroidx/compose/ui/unit/DpRect;-><init>(FFFF)V
-HSPLandroidx/compose/ui/unit/DpRect;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/unit/IntOffset$Companion;-><init>()V
-HSPLandroidx/compose/ui/unit/IntOffset;-><clinit>()V
-HSPLandroidx/compose/ui/unit/IntOffset;-><init>(J)V
-HSPLandroidx/compose/ui/unit/IntOffset;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I
-HSPLandroidx/compose/ui/unit/IntOffsetKt;->IntOffset(II)J
-HSPLandroidx/compose/ui/unit/IntSize$Companion;-><init>()V
-HSPLandroidx/compose/ui/unit/IntSize;-><clinit>()V
-HSPLandroidx/compose/ui/unit/IntSize;-><init>(J)V
-HSPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I
-HSPLandroidx/compose/ui/unit/IntSizeKt;->IntSize(II)J
-HSPLandroidx/compose/ui/unit/IntSizeKt;->toSize-ozmzZPI(J)J
-HSPLandroidx/compose/ui/unit/LayoutDirection;-><clinit>()V
-HSPLandroidx/compose/ui/unit/LayoutDirection;-><init>(ILjava/lang/String;)V
-HSPLandroidx/compose/ui/unit/TextUnit;-><clinit>()V
-HSPLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J
-HSPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F
-HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(D)J
-HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(I)J
-HSPLandroidx/compose/ui/unit/TextUnitKt;->isUnspecified--R2X_6o(J)Z
-HSPLandroidx/compose/ui/unit/TextUnitKt;->pack(FJ)J
-HSPLandroidx/compose/ui/unit/TextUnitType;-><init>(J)V
-HSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/util/MathHelpersKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
-HSPLandroidx/core/R$id;->createCoroutineUnintercepted(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/core/R$id;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/core/R$id;->systemProp$default(Ljava/lang/String;IIII)I
-HSPLandroidx/core/R$id;->systemProp(Ljava/lang/String;JJJ)J
-HSPLandroidx/core/app/ComponentActivity;-><init>()V
-HSPLandroidx/core/app/ComponentActivity;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
-HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
-HSPLandroidx/core/app/ComponentActivity;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
-HSPLandroidx/core/app/CoreComponentFactory;-><init>()V
-HSPLandroidx/core/app/CoreComponentFactory;->checkCompatWrapper(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;
-HSPLandroidx/core/app/CoreComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application;
-HSPLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider;
-HSPLandroidx/core/graphics/TypefaceCompat;-><clinit>()V
-HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;-><init>()V
-HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->createFromFontInfo(Landroid/content/Context;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface;
-HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->findBaseFont(Landroid/graphics/fonts/FontFamily;I)Landroid/graphics/fonts/Font;
-HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->getMatchScore(Landroid/graphics/fonts/FontStyle;Landroid/graphics/fonts/FontStyle;)I
-HSPLandroidx/core/graphics/TypefaceCompatBaseImpl;-><init>()V
-HSPLandroidx/core/graphics/TypefaceCompatUtil$Api19Impl;->openFileDescriptor(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;
-HSPLandroidx/core/graphics/TypefaceCompatUtil;->mmap(Landroid/content/Context;Landroid/net/Uri;)Ljava/nio/MappedByteBuffer;
-HSPLandroidx/core/os/BuildCompat;->isAtLeastT()Z
-HSPLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V
-HSPLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V
-HSPLandroidx/core/os/TraceCompat;-><clinit>()V
-HSPLandroidx/core/provider/FontProvider$$ExternalSyntheticLambda0;-><init>()V
-HSPLandroidx/core/provider/FontProvider$Api16Impl;->query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Landroid/database/Cursor;
-HSPLandroidx/core/provider/FontProvider;-><clinit>()V
-HSPLandroidx/core/provider/FontProvider;->getFontFamilyResult(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult;
-HSPLandroidx/core/provider/FontRequest;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V
-HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;-><init>(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)V
-HSPLandroidx/core/provider/FontsContractCompat$FontInfo;-><init>(Landroid/net/Uri;IIZI)V
-HSPLandroidx/core/util/Preconditions;->checkArgument(Ljava/lang/String;Z)V
-HSPLandroidx/core/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
-HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;-><init>(Landroidx/core/view/AccessibilityDelegateCompat;)V
-HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->dispatchPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z
-HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider;
-HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
-HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
-HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEvent(Landroid/view/View;I)V
-HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
-HSPLandroidx/core/view/AccessibilityDelegateCompat;-><clinit>()V
-HSPLandroidx/core/view/AccessibilityDelegateCompat;-><init>()V
-HSPLandroidx/core/view/MenuHostHelper;-><init>()V
-HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;-><init>()V
-HSPLandroidx/core/view/ViewCompat;-><clinit>()V
-HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;-><init>(Landroid/view/accessibility/AccessibilityNodeProvider;)V
-HSPLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
-HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;-><init>()V
-HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
-HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
-HSPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
-HSPLandroidx/emoji2/text/DefaultGlyphChecker;-><clinit>()V
-HSPLandroidx/emoji2/text/DefaultGlyphChecker;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;-><init>(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V
-HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V
-HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;-><init>(Landroidx/emoji2/text/EmojiCompat;)V
-HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal;-><init>(Landroidx/emoji2/text/EmojiCompat;)V
-HSPLandroidx/emoji2/text/EmojiCompat$Config;-><init>(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V
-HSPLandroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompat$InitCallback;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;-><init>(Ljava/util/List;ILjava/lang/Throwable;)V
-HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->run()V
-HSPLandroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompat;-><clinit>()V
-HSPLandroidx/emoji2/text/EmojiCompat;-><init>(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig;)V
-HSPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat;
-HSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I
-HSPLandroidx/emoji2/text/EmojiCompat;->load()V
-HSPLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadSuccess()V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;-><init>(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig;-><init>(Landroid/content/Context;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;-><init>(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;-><init>(Landroid/content/Context;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Boolean;
-HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
-HSPLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List;
-HSPLandroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Reflections;->getExclusions()Ljava/util/Set;
-HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;-><init>(Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;Landroidx/emoji2/text/EmojiCompat$SpanFactory;)V
-HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Ljava/lang/Object;
-HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;-><init>(Landroidx/emoji2/text/MetadataRepo$Node;Z[I)V
-HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->reset()V
-HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->shouldUseEmojiPresentationStyleForSingleCodepoint()Z
-HSPLandroidx/emoji2/text/EmojiProcessor;-><init>(Landroidx/emoji2/text/MetadataRepo;Landroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;Landroidx/emoji2/text/DefaultGlyphChecker;Ljava/util/Set;)V
-HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/CharSequence;IIIZLandroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;)Ljava/lang/Object;
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;-><init>()V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;)V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->run()V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;-><init>(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->cleanUp()V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->loadInternal()V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->retrieveFontInfo()Landroidx/core/provider/FontsContractCompat$FontInfo;
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><clinit>()V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><init>(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V
-HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;-><init>(Ljava/nio/ByteBuffer;)V
-HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->readUnsignedInt()J
-HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->skip(I)V
-HSPLandroidx/emoji2/text/MetadataListReader;->read(Ljava/nio/MappedByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList;
-HSPLandroidx/emoji2/text/MetadataRepo$Node;-><init>()V
-HSPLandroidx/emoji2/text/MetadataRepo$Node;-><init>(I)V
-HSPLandroidx/emoji2/text/MetadataRepo$Node;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;II)V
-HSPLandroidx/emoji2/text/MetadataRepo;-><init>(Landroid/graphics/Typeface;Landroidx/emoji2/text/flatbuffer/MetadataList;)V
-HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><clinit>()V
-HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><init>(Landroidx/emoji2/text/MetadataRepo;I)V
-HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointAt(I)I
-HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointsLength()I
-HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;-><init>()V
-HSPLandroidx/emoji2/text/flatbuffer/MetadataList;-><init>()V
-HSPLandroidx/emoji2/text/flatbuffer/Table;-><init>()V
-HSPLandroidx/emoji2/text/flatbuffer/Table;->__offset(I)I
-HSPLandroidx/emoji2/text/flatbuffer/Table;->__reset(ILjava/nio/ByteBuffer;)V
-HSPLandroidx/emoji2/text/flatbuffer/Utf8Safe;-><init>()V
-HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;-><clinit>()V
-HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;-><init>(Landroidx/lifecycle/DefaultLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V
-HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;-><init>()V
-HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/Lifecycle$Event$Companion;-><init>()V
-HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event;
-HSPLandroidx/lifecycle/Lifecycle$Event$WhenMappings;-><clinit>()V
-HSPLandroidx/lifecycle/Lifecycle$Event;-><clinit>()V
-HSPLandroidx/lifecycle/Lifecycle$Event;-><init>(ILjava/lang/String;)V
-HSPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State;
-HSPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event;
-HSPLandroidx/lifecycle/Lifecycle$State;-><clinit>()V
-HSPLandroidx/lifecycle/Lifecycle$State;-><init>(ILjava/lang/String;)V
-HSPLandroidx/lifecycle/Lifecycle;-><init>()V
-HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;-><init>()V
-HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/LifecycleDispatcher;-><clinit>()V
-HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;-><init>(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V
-HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State;
-HSPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->sync()V
-HSPLandroidx/lifecycle/Lifecycling;-><clinit>()V
-HSPLandroidx/lifecycle/ProcessLifecycleInitializer;-><init>()V
-HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
-HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List;
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$2;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroidx/lifecycle/ProcessLifecycleOwner$3$1;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner$3;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;->onActivityPostResumed(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;->onActivityPostStarted(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><clinit>()V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><init>()V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed()V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/LifecycleRegistry;
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><init>()V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->registerIn(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment;-><init>()V
-HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/ReportFragment;->injectIfNeededIn(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/ReportFragment;->onResume()V
-HSPLandroidx/lifecycle/ReportFragment;->onStart()V
-HSPLandroidx/lifecycle/SavedStateHandleAttacher;-><init>(Landroidx/lifecycle/SavedStateHandlesProvider;)V
-HSPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;-><init>()V
-HSPLandroidx/lifecycle/SavedStateHandleSupport$SAVED_STATE_REGISTRY_OWNER_KEY$1;-><init>()V
-HSPLandroidx/lifecycle/SavedStateHandleSupport$VIEW_MODEL_STORE_OWNER_KEY$1;-><init>()V
-HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;-><clinit>()V
-HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;-><init>()V
-HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/lifecycle/SavedStateHandleSupport;-><clinit>()V
-HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;-><init>(Landroidx/lifecycle/ViewModelStoreOwner;)V
-HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/lifecycle/SavedStateHandlesProvider;-><init>(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V
-HSPLandroidx/lifecycle/SavedStateHandlesVM;-><init>()V
-HSPLandroidx/lifecycle/ViewModel;-><init>()V
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;-><clinit>()V
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;-><init>()V
-HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl;-><clinit>()V
-HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl;-><init>()V
-HSPLandroidx/lifecycle/ViewModelStore;-><init>()V
-HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1;-><clinit>()V
-HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1;-><init>()V
-HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2;-><clinit>()V
-HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2;-><init>()V
-HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/lifecycle/ViewTreeLifecycleOwner;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner;
-HSPLandroidx/lifecycle/runtime/R$id;-><init>()V
-HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;-><clinit>()V
-HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;-><init>()V
-HSPLandroidx/lifecycle/viewmodel/CreationExtras;-><init>()V
-HSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;-><init>([Landroidx/lifecycle/viewmodel/ViewModelInitializer;)V
-HSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;->create(Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel;
-HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>()V
-HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>(Landroidx/lifecycle/viewmodel/CreationExtras;)V
-HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;-><init>(Ljava/lang/Class;)V
-HSPLandroidx/metrics/performance/DelegatingFrameMetricsListener;-><init>(Ljava/util/ArrayList;)V
-HSPLandroidx/metrics/performance/DelegatingFrameMetricsListener;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
-HSPLandroidx/metrics/performance/FrameData;-><init>(JJZLjava/util/ArrayList;)V
-HSPLandroidx/metrics/performance/FrameDataApi24;-><init>(JJJZLjava/util/ArrayList;)V
-HSPLandroidx/metrics/performance/FrameDataApi31;-><init>(JJJJZLjava/util/ArrayList;)V
-HSPLandroidx/metrics/performance/FrameDataApi31;->copy()Landroidx/metrics/performance/FrameData;
-HSPLandroidx/metrics/performance/JankStats;-><init>(Landroid/view/Window;Lcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;)V
-HSPLandroidx/metrics/performance/JankStatsApi16Impl$onFrameListenerDelegate$1;-><init>(Landroidx/metrics/performance/JankStats;Landroidx/metrics/performance/JankStatsApi16Impl;)V
-HSPLandroidx/metrics/performance/JankStatsApi16Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;)V
-HSPLandroidx/metrics/performance/JankStatsApi22Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;)V
-HSPLandroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;-><init>(Landroidx/metrics/performance/JankStatsApi24Impl;Landroidx/metrics/performance/JankStats;)V
-HSPLandroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
-HSPLandroidx/metrics/performance/JankStatsApi24Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
-HSPLandroidx/metrics/performance/JankStatsApi24Impl;->getOrCreateFrameMetricsListenerDelegator(Landroid/view/Window;)Landroidx/metrics/performance/DelegatingFrameMetricsListener;
-HSPLandroidx/metrics/performance/JankStatsApi24Impl;->setupFrameTimer(Z)V
-HSPLandroidx/metrics/performance/JankStatsApi26Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
-HSPLandroidx/metrics/performance/JankStatsApi26Impl;->getFrameStartTime$metrics_performance_release(Landroid/view/FrameMetrics;)J
-HSPLandroidx/metrics/performance/JankStatsApi31Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
-HSPLandroidx/metrics/performance/JankStatsApi31Impl;->getExpectedFrameDuration(Landroid/view/FrameMetrics;)J
-HSPLandroidx/metrics/performance/JankStatsApi31Impl;->getFrameData$metrics_performance_release(JJLandroid/view/FrameMetrics;)Landroidx/metrics/performance/FrameDataApi24;
-HSPLandroidx/metrics/performance/JankStatsBaseImpl;-><init>(Landroidx/metrics/performance/JankStats;)V
-HSPLandroidx/metrics/performance/PerformanceMetricsState$Holder;-><init>()V
-HSPLandroidx/metrics/performance/PerformanceMetricsState;-><init>()V
-HSPLandroidx/metrics/performance/PerformanceMetricsState;->addFrameState(JJLjava/util/ArrayList;Ljava/util/ArrayList;)V
-HSPLandroidx/metrics/performance/PerformanceMetricsState;->cleanupSingleFrameStates$metrics_performance_release()V
-HSPLandroidx/metrics/performance/PerformanceMetricsState;->getIntervalStates$metrics_performance_release(JJLjava/util/ArrayList;)V
-HSPLandroidx/metrics/performance/R$id;->createZeroVectorFrom(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;-><init>(Landroidx/profileinstaller/ProfileInstallerInitializer;Landroid/content/Context;)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->run()V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;-><init>(ILjava/lang/Object;)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Runnable;)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->doFrame(J)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Result;-><init>()V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer;-><init>()V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List;
-HSPLandroidx/savedstate/Recreator;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V
-HSPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;-><init>(Landroidx/savedstate/SavedStateRegistry;)V
-HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/savedstate/SavedStateRegistry;-><init>()V
-HSPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle;
-HSPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V
-HSPLandroidx/savedstate/SavedStateRegistryController;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V
-HSPLandroidx/savedstate/SavedStateRegistryController;->performAttach()V
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;-><clinit>()V
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;-><init>()V
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;-><clinit>()V
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;-><init>()V
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/startup/AppInitializer;-><clinit>()V
-HSPLandroidx/startup/AppInitializer;-><init>(Landroid/content/Context;)V
-HSPLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V
-HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/HashSet;)Ljava/lang/Object;
-HSPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer;
-HSPLandroidx/startup/InitializationProvider;-><init>()V
-HSPLandroidx/startup/InitializationProvider;->onCreate()Z
-HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Z
-HSPLandroidx/tracing/Trace;->isEnabled()Z
-HSPLandroidx/tv/foundation/ContentInViewModifier$modifier$1;-><init>(Landroidx/tv/foundation/ContentInViewModifier;)V
-HSPLandroidx/tv/foundation/ContentInViewModifier$modifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/ContentInViewModifier;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/tv/foundation/PivotOffsets;)V
-HSPLandroidx/tv/foundation/ContentInViewModifier;->bringChildIntoView(Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$1$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/ContentInViewModifier;->calculateRectForParent(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/tv/foundation/ContentInViewModifier;->computeDestination-JVtK1S4(Landroidx/compose/ui/geometry/Rect;JLandroidx/tv/foundation/PivotOffsets;)Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/tv/foundation/ContentInViewModifier;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/tv/foundation/ContentInViewModifier;->onRemeasured-ozmzZPI(J)V
-HSPLandroidx/tv/foundation/ContentInViewModifier;->performBringIntoView(Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/ContentInViewModifier;->relocationDistance(FFFLandroidx/tv/foundation/PivotOffsets;)F
-HSPLandroidx/tv/foundation/PivotOffsets;-><init>(I)V
-HSPLandroidx/tv/foundation/PivotOffsets;->validateFraction(F)V
-HSPLandroidx/tv/foundation/ScrollableWithPivotKt$scrollableNestedScrollConnection$1;-><init>(Landroidx/compose/runtime/MutableState;Z)V
-HSPLandroidx/tv/foundation/ScrollableWithPivotKt$scrollableWithPivot$2;-><init>(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZZLandroidx/tv/foundation/PivotOffsets;)V
-HSPLandroidx/tv/foundation/ScrollableWithPivotKt$scrollableWithPivot$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/ScrollableWithPivotKt;->scrollableWithPivot(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/tv/foundation/PivotOffsets;ZZ)Landroidx/compose/ui/Modifier;
-HSPLandroidx/tv/foundation/ScrollingLogic;-><init>(Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/gestures/ScrollableState;)V
-HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;-><init>(Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;Landroidx/compose/ui/semantics/CollectionInfo;)V
-HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V
-HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;)V
-HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Lkotlinx/coroutines/CoroutineScope;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;)V
-HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/tv/foundation/lazy/list/AwaitFirstLayoutModifier$waitForFirstLayout$1;-><init>(Landroidx/tv/foundation/lazy/list/AwaitFirstLayoutModifier;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/tv/foundation/lazy/list/AwaitFirstLayoutModifier;-><init>()V
-HSPLandroidx/tv/foundation/lazy/list/AwaitFirstLayoutModifier;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/tv/foundation/lazy/list/AwaitFirstLayoutModifier;->waitForFirstLayout(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/DataIndex;-><init>(I)V
-HSPLandroidx/tv/foundation/lazy/list/DataIndex;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/tv/foundation/lazy/list/EmptyLazyListLayoutInfo;-><clinit>()V
-HSPLandroidx/tv/foundation/lazy/list/EmptyLazyListLayoutInfo;-><init>()V
-HSPLandroidx/tv/foundation/lazy/list/LazyDslKt;->TvLazyRow(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZLandroidx/tv/foundation/PivotOffsets;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsInfo$Interval;-><init>(II)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsInfo$Interval;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsInfo;-><init>()V
-HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;-><init>()V
-HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal$layout$2;-><init>(Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal;Lkotlin/jvm/internal/Ref$ObjectRef;I)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal;-><clinit>()V
-HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal;->getValue()Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal;->hasMoreContent-FR3nfPY(Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsInfo$Interval;I)Z
-HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal;->hasMoreContent_FR3nfPY$hasMoreItemsAfter(Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsInfo$Interval;Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal;)Z
-HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal;->layout-o7g1Pn8(ILkotlin/jvm/functions/Function1;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListIntervalContent;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListIntervalContent;->getKey()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/tv/foundation/lazy/list/LazyListIntervalContent;->getType()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator;-><init>(Lkotlinx/coroutines/CoroutineScope;Z)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl$1$1;-><init>(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;I)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;-><init>(Landroidx/compose/foundation/lazy/layout/MutableIntervalList;Lkotlin/ranges/IntRange;Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;Landroidx/tv/foundation/lazy/list/TvLazyListState;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->Item(ILandroidx/compose/runtime/Composer;I)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getItemCount()I
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getKeyToIndexMap()Ljava/util/Map;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->Item(ILandroidx/compose/runtime/Composer;I)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getContentType(I)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getHeaderIndexes()Ljava/util/List;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemCount()I
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemScope()Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKey(I)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKeyToIndexMap()Ljava/util/Map;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;Landroidx/tv/foundation/lazy/list/TvLazyListState;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;-><clinit>()V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;-><init>()V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;-><clinit>()V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;-><init>()V
-HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->invoke()Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListKt$ScrollPositionUpdater$1;-><init>(Landroidx/tv/foundation/lazy/list/LazyListItemProvider;Landroidx/tv/foundation/lazy/list/TvLazyListState;I)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListKt$ScrollPositionUpdater$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;JII)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;-><init>(IILandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIILandroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator;J)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->createItem-44a8dek(ILjava/lang/Object;Ljava/util/List;)Landroidx/tv/foundation/lazy/list/LazyMeasuredItem;
-HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;-><init>(ZLandroidx/compose/foundation/layout/PaddingValues;ZLandroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator;Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsInfo;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZZILandroidx/tv/foundation/PivotOffsets;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListKt;->ScrollPositionUpdater(Landroidx/tv/foundation/lazy/list/LazyListItemProvider;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureKt$measureLazyList$5;-><init>(Ljava/util/ArrayList;Landroidx/tv/foundation/lazy/list/LazyListPositionedItem;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureKt$measureLazyList$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureKt;->createItemsAfterList$addItem(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/tv/foundation/lazy/list/LazyMeasuredItemProvider;I)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;-><init>(Landroidx/tv/foundation/lazy/list/LazyMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;ILandroidx/compose/foundation/gestures/Orientation;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map;
-HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getHeight()I
-HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getTotalItemsCount()I
-HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List;
-HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getWidth()I
-HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->placeChildren()V
-HSPLandroidx/tv/foundation/lazy/list/LazyListPinnableContainerProviderKt$LazyListPinnableContainerProvider$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/tv/foundation/lazy/list/LazyListPinnableItem;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListPinnableContainerProviderKt$LazyListPinnableContainerProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/tv/foundation/lazy/list/LazyListPinnableContainerProviderKt$LazyListPinnableContainerProvider$1$1;-><init>(Landroidx/tv/foundation/lazy/list/LazyListPinnableItem;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListPinnableContainerProviderKt$LazyListPinnableContainerProvider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListPinnableContainerProviderKt;->LazyListPinnableContainerProvider(Landroidx/tv/foundation/lazy/list/TvLazyListState;ILkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListPinnableItem;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListPinnableItem;->getIndex()I
-HSPLandroidx/tv/foundation/lazy/list/LazyListPinnableItem;->getPinsCount()I
-HSPLandroidx/tv/foundation/lazy/list/LazyListPinnableItem;->pin()Landroidx/tv/foundation/lazy/list/LazyListPinnableItem;
-HSPLandroidx/tv/foundation/lazy/list/LazyListPinnableItem;->unpin()V
-HSPLandroidx/tv/foundation/lazy/list/LazyListPlaceableWrapper;-><init>(JLandroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListPositionedItem;-><init>(IILjava/lang/Object;IIIZLjava/util/ArrayList;Landroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator;JZI)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListPositionedItem;->getAnimationSpec(I)Landroidx/compose/animation/core/FiniteAnimationSpec;
-HSPLandroidx/tv/foundation/lazy/list/LazyListPositionedItem;->getIndex()I
-HSPLandroidx/tv/foundation/lazy/list/LazyListPositionedItem;->getOffset-Bjo55l4(I)J
-HSPLandroidx/tv/foundation/lazy/list/LazyListPositionedItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListScrollPosition;-><init>(II)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListScrollPosition;->update-ELO9Zo8(II)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;-><init>(II)V
-HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt;->rememberTvLazyListState(Landroidx/compose/runtime/Composer;)Landroidx/tv/foundation/lazy/list/TvLazyListState;
-HSPLandroidx/tv/foundation/lazy/list/LazyMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIILandroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator;IJLjava/lang/Object;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyMeasuredItem;->position(III)Landroidx/tv/foundation/lazy/list/LazyListPositionedItem;
-HSPLandroidx/tv/foundation/lazy/list/LazyMeasuredItemProvider;-><init>(JZLandroidx/tv/foundation/lazy/list/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;Landroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;)V
-HSPLandroidx/tv/foundation/lazy/list/LazyMeasuredItemProvider;->getAndMeasure-KvsoDyw(I)Landroidx/tv/foundation/lazy/list/LazyMeasuredItem;
-HSPLandroidx/tv/foundation/lazy/list/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;)V
-HSPLandroidx/tv/foundation/lazy/list/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V
-HSPLandroidx/tv/foundation/lazy/list/LazySemanticsKt$rememberLazyListSemanticState$1$1;-><init>(ZLandroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;Z)V
-HSPLandroidx/tv/foundation/lazy/list/LazySemanticsKt$rememberLazyListSemanticState$1$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo;
-HSPLandroidx/tv/foundation/lazy/list/LazySemanticsKt$rememberLazyListSemanticState$1$1;->scrollAxisRange()Landroidx/compose/ui/semantics/ScrollAxisRange;
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;-><init>()V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListScope$items$1;-><clinit>()V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListScope$items$1;-><init>()V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListScope$items$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListScopeImpl;-><init>()V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListScopeImpl;->items(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$Companion$Saver$1;-><clinit>()V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$Companion$Saver$1;-><init>()V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$Companion$Saver$2;-><clinit>()V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$Companion$Saver$2;-><init>()V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$remeasurementModifier$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;)V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/layout/Remeasurement;)V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$scrollableState$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;)V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$scrollableState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;-><clinit>()V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;-><init>(II)V
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->getCanScrollBackward()Z
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->getCanScrollForward()Z
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->getFirstVisibleItemIndex()I
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->getLayoutInfo()Landroidx/tv/foundation/lazy/list/TvLazyListLayoutInfo;
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->updateScrollPositionIfTheFirstItemWasMoved$tv_foundation_release(Landroidx/tv/foundation/lazy/list/LazyListItemProvider;)V
-HSPLandroidx/tv/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
-HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;-><clinit>()V
-HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;-><init>()V
-HSPLandroidx/tv/material3/ColorSchemeKt;-><clinit>()V
-HSPLandroidx/tv/material3/ContentColorKt$LocalContentColor$1;-><clinit>()V
-HSPLandroidx/tv/material3/ContentColorKt$LocalContentColor$1;-><init>()V
-HSPLandroidx/tv/material3/ContentColorKt;-><clinit>()V
-HSPLandroidx/tv/material3/MaterialThemeKt$$ExternalSyntheticOutline0;->m(JLandroidx/compose/runtime/ParcelableSnapshotMutableState;)V
-HSPLandroidx/tv/material3/MaterialThemeKt$MaterialTheme$1;-><init>(Landroidx/tv/material3/Typography;Lkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/tv/material3/MaterialThemeKt$MaterialTheme$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/MaterialThemeKt$MaterialTheme$2;-><init>(Landroidx/tv/material3/ColorScheme;Landroidx/tv/material3/Shapes;Landroidx/tv/material3/Typography;Lkotlin/jvm/functions/Function2;II)V
-HSPLandroidx/tv/material3/MaterialThemeKt;->MaterialTheme(Landroidx/tv/material3/ColorScheme;Landroidx/tv/material3/Shapes;Landroidx/tv/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/tv/material3/ShapeDefaults;-><clinit>()V
-HSPLandroidx/tv/material3/Shapes;-><init>(I)V
-HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;-><clinit>()V
-HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;-><init>()V
-HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/tv/material3/ShapesKt;-><clinit>()V
-HSPLandroidx/tv/material3/TabColors;-><init>(JJJJJJJJ)V
-HSPLandroidx/tv/material3/TabKt$Tab$1;-><clinit>()V
-HSPLandroidx/tv/material3/TabKt$Tab$1;-><init>()V
-HSPLandroidx/tv/material3/TabKt$Tab$3$1$1;-><init>(Z)V
-HSPLandroidx/tv/material3/TabKt$Tab$3$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TabKt$Tab$3$2$1;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/tv/material3/TabKt$Tab$3$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TabKt$Tab$3;-><init>(Landroidx/compose/ui/Modifier;ZILandroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function0;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/tv/material3/TabKt$Tab$4;-><init>(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLandroidx/tv/material3/TabColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;II)V
-HSPLandroidx/tv/material3/TabKt$Tab$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TabKt;->Tab(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLandroidx/tv/material3/TabColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/tv/material3/TabRowDefaults$PillIndicator$1;-><init>(Landroidx/tv/material3/TabRowDefaults;Landroidx/compose/ui/unit/DpRect;Landroidx/compose/ui/Modifier;JJII)V
-HSPLandroidx/tv/material3/TabRowDefaults$PillIndicator$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TabRowDefaults;-><clinit>()V
-HSPLandroidx/tv/material3/TabRowDefaults;-><init>()V
-HSPLandroidx/tv/material3/TabRowDefaults;->PillIndicator-eaDK9VM(Landroidx/compose/ui/unit/DpRect;Landroidx/compose/ui/Modifier;JJLandroidx/compose/runtime/Composer;II)V
-HSPLandroidx/tv/material3/TabRowKt$LocalTabRowHasFocus$1;-><clinit>()V
-HSPLandroidx/tv/material3/TabRowKt$LocalTabRowHasFocus$1;-><init>()V
-HSPLandroidx/tv/material3/TabRowKt$TabRow$1;-><init>(I)V
-HSPLandroidx/tv/material3/TabRowKt$TabRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;-><init>(Lkotlin/jvm/functions/Function3;Ljava/util/ArrayList;I)V
-HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Ljava/util/ArrayList;ILkotlin/jvm/functions/Function3;III)V
-HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;-><init>(ILkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function3;)V
-HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TabRowKt$TabRow$2;-><init>(Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;I)V
-HSPLandroidx/tv/material3/TabRowKt$TabRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TabRowKt$TabRow$3;-><init>(ILandroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;II)V
-HSPLandroidx/tv/material3/TabRowKt$TabRow$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TabRowKt;-><clinit>()V
-HSPLandroidx/tv/material3/TabRowKt;->TabRow-pAZo6Ak(ILandroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/tv/material3/TabRowSlots;-><clinit>()V
-HSPLandroidx/tv/material3/TabRowSlots;-><init>(ILjava/lang/String;)V
-HSPLandroidx/tv/material3/TextKt$LocalTextStyle$1;-><clinit>()V
-HSPLandroidx/tv/material3/TextKt$LocalTextStyle$1;-><init>()V
-HSPLandroidx/tv/material3/TextKt$LocalTextStyle$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/tv/material3/TextKt$Text$1;-><clinit>()V
-HSPLandroidx/tv/material3/TextKt$Text$1;-><init>()V
-HSPLandroidx/tv/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/tv/material3/TextKt$Text$2;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;III)V
-HSPLandroidx/tv/material3/TextKt;-><clinit>()V
-HSPLandroidx/tv/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/tv/material3/TextKt;->Text-fLXpl1I(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
-HSPLandroidx/tv/material3/Typography;-><init>(I)V
-HSPLandroidx/tv/material3/TypographyKt$LocalTypography$1;-><clinit>()V
-HSPLandroidx/tv/material3/TypographyKt$LocalTypography$1;-><init>()V
-HSPLandroidx/tv/material3/TypographyKt$LocalTypography$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/tv/material3/TypographyKt;-><clinit>()V
-HSPLandroidx/tv/material3/tokens/ColorDarkTokens;-><clinit>()V
-HSPLandroidx/tv/material3/tokens/PaletteTokens;-><clinit>()V
-HSPLandroidx/tv/material3/tokens/ShapeTokens;-><clinit>()V
-HSPLandroidx/tv/material3/tokens/TypeScaleTokens;-><clinit>()V
-HSPLandroidx/tv/material3/tokens/TypefaceTokens;-><clinit>()V
-HSPLandroidx/tv/material3/tokens/TypographyTokens;-><clinit>()V
-HSPLcoil/base/R$id;->hasSpan(Landroid/text/Spanned;Ljava/lang/Class;)Z
-HSPLcoil/request/ViewTargetDisposable;->findRootCoordinates(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/layout/LayoutCoordinates;
-HSPLcoil/request/ViewTargetDisposable;->updateChangedFlags(I)I
-HSPLcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt$lambda-1$1;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt$lambda-1$1;-><init>()V
-HSPLcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;-><init>(Lcom/example/tvcomposebasedtests/JankStatsAggregator;)V
-HSPLcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;->onFrame(Landroidx/metrics/performance/FrameData;)V
-HSPLcom/example/tvcomposebasedtests/JankStatsAggregator;-><init>(Landroid/view/Window;Lcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;)V
-HSPLcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;-><init>(Lcom/example/tvcomposebasedtests/MainActivity;)V
-HSPLcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;-><init>(Lcom/example/tvcomposebasedtests/MainActivity;)V
-HSPLcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
-HSPLcom/example/tvcomposebasedtests/MainActivity;-><init>()V
-HSPLcom/example/tvcomposebasedtests/MainActivity;->onCreate(Landroid/os/Bundle;)V
-HSPLcom/example/tvcomposebasedtests/MainActivity;->onResume()V
-HSPLcom/example/tvcomposebasedtests/UtilsKt;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1$1$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt;->App(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-1$1;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-1$1;-><init>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-2$1;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-2$1;-><init>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-3$1;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-3$1;-><init>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-4$1;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-4$1;-><init>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-1$1;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-1$1;-><init>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-2$1;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-2$1;-><init>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-3$1;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-3$1;-><init>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-4$1;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-4$1;-><init>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-5$1;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-5$1;-><init>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-6$1;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-6$1;-><init>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-7$1;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-7$1;-><init>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-7$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$SampleCardItem$2;-><init>(II)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$SampleCardItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$SampleTvLazyRow$1$1;-><init>(I)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$SampleTvLazyRow$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$drawBorderAndScaleOnFocus$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$drawBorderAndScaleOnFocus$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt;->SampleCardItem(ILandroidx/compose/runtime/Composer;I)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt;->SampleTvLazyRow(ILandroidx/compose/runtime/Composer;I)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;-><clinit>()V
-HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;-><init>(Ljava/lang/String;ILjava/lang/String;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;->values()[Lcom/example/tvcomposebasedtests/tvComponents/Navigation;
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;-><init>(ILkotlin/jvm/functions/Function1;)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;->invoke()Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$2;-><init>(Ljava/lang/String;)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;-><init>(IILjava/util/List;Lkotlin/jvm/functions/Function1;)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$2$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$4;-><init>(IILkotlin/jvm/functions/Function1;)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt;->PillIndicatorTabRow(Ljava/util/List;ILkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt;->TopNavigation(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
-HSPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
-HSPLkotlin/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLkotlin/Result$Failure;-><init>(Ljava/lang/Throwable;)V
-HSPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable;
-HSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Lkotlin/Result$Failure;
-HSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V
-HSPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object;
-HSPLkotlin/UNINITIALIZED_VALUE;-><clinit>()V
-HSPLkotlin/UNINITIALIZED_VALUE;-><init>()V
-HSPLkotlin/Unit;-><clinit>()V
-HSPLkotlin/Unit;-><init>()V
-HSPLkotlin/UnsafeLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLkotlin/UnsafeLazyImpl;->getValue()Ljava/lang/Object;
-HSPLkotlin/UnsignedKt;->ulongToDouble(J)D
-HSPLkotlin/collections/AbstractCollection;-><init>()V
-HSPLkotlin/collections/AbstractCollection;->isEmpty()Z
-HSPLkotlin/collections/AbstractCollection;->size()I
-HSPLkotlin/collections/AbstractList;-><init>()V
-HSPLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/collections/AbstractMap;-><init>()V
-HSPLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set;
-HSPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/collections/AbstractMap;->size()I
-HSPLkotlin/collections/AbstractMutableList;-><init>()V
-HSPLkotlin/collections/AbstractMutableMap;-><init>()V
-HSPLkotlin/collections/AbstractSet;-><init>()V
-HSPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/collections/ArrayDeque;-><clinit>()V
-HSPLkotlin/collections/ArrayDeque;-><init>()V
-HSPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)V
-HSPLkotlin/collections/ArrayDeque;->ensureCapacity(I)V
-HSPLkotlin/collections/ArrayDeque;->getSize()I
-HSPLkotlin/collections/ArrayDeque;->incremented(I)I
-HSPLkotlin/collections/ArrayDeque;->isEmpty()Z
-HSPLkotlin/collections/ArrayDeque;->positiveMod(I)I
-HSPLkotlin/collections/ArrayDeque;->removeFirst()Ljava/lang/Object;
-HSPLkotlin/collections/ArraysKt___ArraysKt;->asList([Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto$default([I[III)V
-HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;IIII)V
-HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto([I[IIII)V
-HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)V
-HSPLkotlin/collections/ArraysKt___ArraysKt;->fill$default([Ljava/lang/Object;Lkotlinx/coroutines/internal/Symbol;)V
-HSPLkotlin/collections/ArraysKt___ArraysKt;->fill(II[Ljava/lang/Object;)V
-HSPLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLkotlin/collections/CollectionsKt__CollectionsKt;->getLastIndex(Ljava/util/List;)I
-HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOf(Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOf([Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt__IteratorsJVMKt;->collectionSizeOrDefault(Ljava/lang/Iterable;)I
-HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V
-HSPLkotlin/collections/CollectionsKt__ReversedViewsKt;->addAll(Ljava/lang/Iterable;Ljava/util/Collection;)V
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->lastOrNull(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/ArrayList;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/ArrayList;
-HSPLkotlin/collections/EmptyList;-><clinit>()V
-HSPLkotlin/collections/EmptyList;-><init>()V
-HSPLkotlin/collections/EmptyList;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/collections/EmptyList;->isEmpty()Z
-HSPLkotlin/collections/EmptyList;->size()I
-HSPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object;
-HSPLkotlin/collections/EmptyMap;-><clinit>()V
-HSPLkotlin/collections/EmptyMap;-><init>()V
-HSPLkotlin/collections/EmptyMap;->isEmpty()Z
-HSPLkotlin/collections/EmptyMap;->size()I
-HSPLkotlin/collections/IntIterator;-><init>()V
-HSPLkotlin/collections/SetsKt__SetsKt;->mapCapacity(I)I
-HSPLkotlin/coroutines/AbstractCoroutineContextElement;-><init>(Lkotlin/coroutines/CoroutineContext$Key;)V
-HSPLkotlin/coroutines/AbstractCoroutineContextElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlin/coroutines/AbstractCoroutineContextElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlin/coroutines/AbstractCoroutineContextElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
-HSPLkotlin/coroutines/AbstractCoroutineContextElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/AbstractCoroutineContextElement;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/AbstractCoroutineContextKey;-><init>(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V
-HSPLkotlin/coroutines/CombinedContext;-><init>(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/ContinuationInterceptor$Key;-><clinit>()V
-HSPLkotlin/coroutines/ContinuationInterceptor$Key;-><init>()V
-HSPLkotlin/coroutines/ContinuationKt;->access$lowestBitOf(J)I
-HSPLkotlin/coroutines/ContinuationKt;->binarySearch([II)I
-HSPLkotlin/coroutines/CoroutineContext$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/CoroutineContext$plus$1;-><clinit>()V
-HSPLkotlin/coroutines/CoroutineContext$plus$1;-><init>()V
-HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlin/coroutines/EmptyCoroutineContext;-><clinit>()V
-HSPLkotlin/coroutines/EmptyCoroutineContext;-><init>()V
-HSPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlin/coroutines/EmptyCoroutineContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/SafeContinuation;-><clinit>()V
-HSPLkotlin/coroutines/SafeContinuation;-><init>(Lkotlin/coroutines/intrinsics/CoroutineSingletons;Lkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/SafeContinuation;->resumeWith(Ljava/lang/Object;)V
-HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><clinit>()V
-HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><init>(ILjava/lang/String;)V
-HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V
-HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><clinit>()V
-HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><init>()V
-HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V
-HSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/jvm/internal/SuspendLambda;-><init>(ILkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I
-HSPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(III)I
-HSPLkotlin/jvm/JvmClassMappingKt;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect;
-HSPLkotlin/jvm/JvmClassMappingKt;->resolveDefaults(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/TextStyle;
-HSPLkotlin/jvm/internal/CallableReference$NoReceiver;-><clinit>()V
-HSPLkotlin/jvm/internal/CallableReference$NoReceiver;-><init>()V
-HSPLkotlin/jvm/internal/CallableReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V
-HSPLkotlin/jvm/internal/ClassReference;-><clinit>()V
-HSPLkotlin/jvm/internal/ClassReference;-><init>(Ljava/lang/Class;)V
-HSPLkotlin/jvm/internal/ClassReference;->getJClass()Ljava/lang/Class;
-HSPLkotlin/jvm/internal/CollectionToArray;-><clinit>()V
-HSPLkotlin/jvm/internal/CollectionToArray;->toArray(Ljava/util/Collection;)[Ljava/lang/Object;
-HSPLkotlin/jvm/internal/FunctionReference;-><init>(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLkotlin/jvm/internal/FunctionReference;->getArity()I
-HSPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLkotlin/jvm/internal/Intrinsics$$ExternalSyntheticCheckNotZero0;->m(ILjava/lang/String;)V
-HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V
-HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
-HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V
-HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V
-HSPLkotlin/jvm/internal/Intrinsics;->compare(II)I
-HSPLkotlin/jvm/internal/Lambda;-><init>(I)V
-HSPLkotlin/jvm/internal/Lambda;->getArity()I
-HSPLkotlin/jvm/internal/MutablePropertyReference1;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLkotlin/jvm/internal/MutablePropertyReference1Impl;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLkotlin/jvm/internal/MutablePropertyReference;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLkotlin/jvm/internal/PropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)V
-HSPLkotlin/jvm/internal/Ref$BooleanRef;-><init>()V
-HSPLkotlin/jvm/internal/Ref$FloatRef;-><init>()V
-HSPLkotlin/jvm/internal/Ref$ObjectRef;-><init>()V
-HSPLkotlin/jvm/internal/Reflection;-><clinit>()V
-HSPLkotlin/jvm/internal/ReflectionFactory;-><init>()V
-HSPLkotlin/jvm/internal/TypeIntrinsics;->beforeCheckcastToFunctionOfArity(ILjava/lang/Object;)V
-HSPLkotlin/math/MathKt__MathJVMKt;->roundToInt(F)I
-HSPLkotlin/ranges/IntProgression;-><init>(III)V
-HSPLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator;
-HSPLkotlin/ranges/IntProgression;->iterator()Lkotlin/ranges/IntProgressionIterator;
-HSPLkotlin/ranges/IntProgressionIterator;-><init>(III)V
-HSPLkotlin/ranges/IntProgressionIterator;->hasNext()Z
-HSPLkotlin/ranges/IntProgressionIterator;->nextInt()I
-HSPLkotlin/ranges/IntRange;-><clinit>()V
-HSPLkotlin/ranges/IntRange;-><init>(II)V
-HSPLkotlin/ranges/IntRange;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/ranges/IntRange;->isEmpty()Z
-HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(DDD)D
-HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(FFF)F
-HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(III)I
-HSPLkotlin/ranges/RangesKt___RangesKt;->until(II)Lkotlin/ranges/IntRange;
-HSPLkotlin/sequences/ConstrainedOnceSequence;-><init>(Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;)V
-HSPLkotlin/sequences/ConstrainedOnceSequence;->iterator()Ljava/util/Iterator;
-HSPLkotlin/sequences/FilteringSequence$iterator$1;-><init>(Lkotlin/sequences/FilteringSequence;)V
-HSPLkotlin/sequences/FilteringSequence$iterator$1;->calcNext()V
-HSPLkotlin/sequences/FilteringSequence$iterator$1;->hasNext()Z
-HSPLkotlin/sequences/FilteringSequence$iterator$1;->next()Ljava/lang/Object;
-HSPLkotlin/sequences/FilteringSequence;-><init>(Lkotlin/sequences/TransformingSequence;)V
-HSPLkotlin/sequences/GeneratorSequence$iterator$1;-><init>(Lkotlin/sequences/GeneratorSequence;)V
-HSPLkotlin/sequences/GeneratorSequence$iterator$1;->calcNext()V
-HSPLkotlin/sequences/GeneratorSequence$iterator$1;->hasNext()Z
-HSPLkotlin/sequences/GeneratorSequence$iterator$1;->next()Ljava/lang/Object;
-HSPLkotlin/sequences/GeneratorSequence;-><init>(Lkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;Lkotlin/jvm/functions/Function1;)V
-HSPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator;
-HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;-><init>(Ljava/util/Iterator;)V
-HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;
-HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;-><init>(Ljava/lang/Object;)V
-HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->invoke()Ljava/lang/Object;
-HSPLkotlin/sequences/SequencesKt__SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
-HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;-><clinit>()V
-HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;-><init>()V
-HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlin/sequences/SequencesKt___SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List;
-HSPLkotlin/sequences/TransformingSequence$iterator$1;-><init>(Lkotlin/sequences/TransformingSequence;)V
-HSPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z
-HSPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object;
-HSPLkotlin/sequences/TransformingSequence;-><init>(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V
-HSPLkotlin/sequences/TransformingSequence;->iterator()Ljava/util/Iterator;
-HSPLkotlin/text/CharsKt__CharKt;->checkRadix(I)V
-HSPLkotlin/text/CharsKt__CharKt;->isWhitespace(C)Z
-HSPLkotlin/text/StringsKt__StringsJVMKt;->isBlank(Ljava/lang/CharSequence;)Z
-HSPLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/CharSequence;Ljava/lang/String;)Z
-HSPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I
-HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;II)I
-HSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast$default(Ljava/lang/String;)Ljava/lang/String;
-HSPLkotlinx/coroutines/AbstractCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Z)V
-HSPLkotlinx/coroutines/AbstractCoroutine;->afterResume(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String;
-HSPLkotlinx/coroutines/AbstractCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/AbstractCoroutine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/AbstractCoroutine;->isActive()Z
-HSPLkotlinx/coroutines/AbstractCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V
-HSPLkotlinx/coroutines/AbstractCoroutine;->onCompleted(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/AbstractCoroutine;->onCompletionInternal(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/AbstractCoroutine;->resumeWith(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/AbstractCoroutine;->start$enumunboxing$(ILkotlinx/coroutines/AbstractCoroutine;Lkotlin/jvm/functions/Function2;)V
-HSPLkotlinx/coroutines/Active;-><clinit>()V
-HSPLkotlinx/coroutines/Active;-><init>()V
-HSPLkotlinx/coroutines/BeforeResumeCancelHandler;-><init>()V
-HSPLkotlinx/coroutines/BlockingEventLoop;-><init>(Ljava/lang/Thread;)V
-HSPLkotlinx/coroutines/BuildersKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/AbstractCoroutineContextElement;ILkotlin/jvm/functions/Function2;I)Lkotlinx/coroutines/StandaloneCoroutine;
-HSPLkotlinx/coroutines/BuildersKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/StandaloneCoroutine;
-HSPLkotlinx/coroutines/BuildersKt;->withContext(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CancelHandler;-><init>()V
-HSPLkotlinx/coroutines/CancelHandlerBase;-><init>()V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;-><clinit>()V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;-><init>(ILkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->callCancelHandler(Lkotlinx/coroutines/CancelHandler;Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancel(Ljava/lang/Throwable;)Z
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->completeResume()V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$kotlinx_coroutines_core()V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/JobSupport;)Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->initCancellability()V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->installParentHandle()Lkotlinx/coroutines/DisposableHandle;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->isReusable()Z
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->resetStateReusable()Z
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeWith(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumedState(Lkotlinx/coroutines/NotCompleted;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResumeImpl(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/CancellableContinuationImplKt;-><clinit>()V
-HSPLkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl;
-HSPLkotlinx/coroutines/CancelledContinuation;-><clinit>()V
-HSPLkotlinx/coroutines/CancelledContinuation;-><init>(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V
-HSPLkotlinx/coroutines/ChildContinuation;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V
-HSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/ChildHandleNode;-><init>(Lkotlinx/coroutines/JobSupport;)V
-HSPLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z
-HSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/util/concurrent/CancellationException;I)V
-HSPLkotlinx/coroutines/CompletedExceptionally;-><clinit>()V
-HSPLkotlinx/coroutines/CompletedExceptionally;-><init>(Ljava/lang/Throwable;Z)V
-HSPLkotlinx/coroutines/CompletedExceptionally;->getHandled()Z
-HSPLkotlinx/coroutines/CompletionHandlerBase;-><init>()V
-HSPLkotlinx/coroutines/CompletionStateKt;->recoverResult(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;-><clinit>()V
-HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;-><init>()V
-HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CoroutineContextKt;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><clinit>()V
-HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><init>()V
-HSPLkotlinx/coroutines/CoroutineDispatcher$Key;-><init>()V
-HSPLkotlinx/coroutines/CoroutineDispatcher;-><clinit>()V
-HSPLkotlinx/coroutines/CoroutineDispatcher;-><init>()V
-HSPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlinx/coroutines/CoroutineDispatcher;->interceptContinuation(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Lkotlinx/coroutines/internal/DispatchedContinuation;
-HSPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded()Z
-HSPLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/CoroutineDispatcher;->releaseInterceptedContinuation(Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;-><clinit>()V
-HSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;-><init>()V
-HSPLkotlinx/coroutines/CoroutineScopeKt;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/internal/ContextScope;
-HSPLkotlinx/coroutines/CoroutineScopeKt;->cancel$default(Lkotlinx/coroutines/CoroutineScope;)V
-HSPLkotlinx/coroutines/CoroutineScopeKt;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CoroutineScopeKt;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z
-HSPLkotlinx/coroutines/CoroutineScopeKt;->modifierLocalOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLkotlinx/coroutines/DefaultExecutor;-><clinit>()V
-HSPLkotlinx/coroutines/DefaultExecutor;-><init>()V
-HSPLkotlinx/coroutines/DefaultExecutorKt;-><clinit>()V
-HSPLkotlinx/coroutines/DispatchedTask;-><init>(I)V
-HSPLkotlinx/coroutines/DispatchedTask;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/DispatchedTask;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/DispatchedTask;->handleFatalException(Ljava/lang/Throwable;Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/DispatchedTask;->run()V
-HSPLkotlinx/coroutines/DispatchedTaskKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V
-HSPLkotlinx/coroutines/Dispatchers;-><clinit>()V
-HSPLkotlinx/coroutines/Empty;-><init>(Z)V
-HSPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList;
-HSPLkotlinx/coroutines/Empty;->isActive()Z
-HSPLkotlinx/coroutines/EventLoop;-><init>()V
-HSPLkotlinx/coroutines/EventLoop;->decrementUseCount(Z)V
-HSPLkotlinx/coroutines/EventLoop;->incrementUseCount(Z)V
-HSPLkotlinx/coroutines/EventLoop;->isUnconfinedLoopActive()Z
-HSPLkotlinx/coroutines/EventLoop;->processUnconfinedEvent()Z
-HSPLkotlinx/coroutines/EventLoopImplBase;-><clinit>()V
-HSPLkotlinx/coroutines/EventLoopImplBase;-><init>()V
-HSPLkotlinx/coroutines/EventLoopImplPlatform;-><init>()V
-HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;-><clinit>()V
-HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;-><init>()V
-HSPLkotlinx/coroutines/GlobalScope;-><clinit>()V
-HSPLkotlinx/coroutines/GlobalScope;-><init>()V
-HSPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/InvokeOnCancel;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/InvokeOnCompletion;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/Job$DefaultImpls;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZLkotlinx/coroutines/JobNode;I)Lkotlinx/coroutines/DisposableHandle;
-HSPLkotlinx/coroutines/Job$Key;-><clinit>()V
-HSPLkotlinx/coroutines/Job$Key;-><init>()V
-HSPLkotlinx/coroutines/JobCancellationException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V
-HSPLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/JobCancellingNode;-><init>()V
-HSPLkotlinx/coroutines/JobImpl;-><init>(Lkotlinx/coroutines/Job;)V
-HSPLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z
-HSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z
-HSPLkotlinx/coroutines/JobKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlinx/coroutines/JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job;
-HSPLkotlinx/coroutines/JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z
-HSPLkotlinx/coroutines/JobNode;-><init>()V
-HSPLkotlinx/coroutines/JobNode;->dispose()V
-HSPLkotlinx/coroutines/JobNode;->getJob()Lkotlinx/coroutines/JobSupport;
-HSPLkotlinx/coroutines/JobNode;->getList()Lkotlinx/coroutines/NodeList;
-HSPLkotlinx/coroutines/JobNode;->isActive()Z
-HSPLkotlinx/coroutines/JobSupport$ChildCompletion;-><init>(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/JobSupport$Finishing;-><init>(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList;
-HSPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z
-HSPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z
-HSPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/ArrayList;
-HSPLkotlinx/coroutines/JobSupport$Finishing;->setCompleting()V
-HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/JobSupport;-><clinit>()V
-HSPLkotlinx/coroutines/JobSupport;-><init>(Z)V
-HSPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport;->attachChild(Lkotlinx/coroutines/JobSupport;)Lkotlinx/coroutines/ChildHandle;
-HSPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V
-HSPLkotlinx/coroutines/JobSupport;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/util/concurrent/CancellationException;)V
-HSPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z
-HSPLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String;
-HSPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z
-HSPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport;->createCauseException(Ljava/lang/Object;)Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/JobSupport;->finalizeFinishingState(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlinx/coroutines/JobSupport;->getCancellationException()Ljava/util/concurrent/CancellationException;
-HSPLkotlinx/coroutines/JobSupport;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/ArrayList;)Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/JobSupport;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
-HSPLkotlinx/coroutines/JobSupport;->getOnCancelComplete$kotlinx_coroutines_core()Z
-HSPLkotlinx/coroutines/JobSupport;->getOrPromoteCancellingList(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/NodeList;
-HSPLkotlinx/coroutines/JobSupport;->getParentHandle$kotlinx_coroutines_core()Lkotlinx/coroutines/ChildHandle;
-HSPLkotlinx/coroutines/JobSupport;->getState$kotlinx_coroutines_core()Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V
-HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle;
-HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle;
-HSPLkotlinx/coroutines/JobSupport;->isActive()Z
-HSPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z
-HSPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/JobSupport;->nextChild(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/ChildHandleNode;
-HSPLkotlinx/coroutines/JobSupport;->notifyCancelling(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/JobSupport;->promoteSingleToNodeList(Lkotlinx/coroutines/JobNode;)V
-HSPLkotlinx/coroutines/JobSupport;->start()Z
-HSPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I
-HSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/JobSupportKt;-><clinit>()V
-HSPLkotlinx/coroutines/JobSupportKt;-><init>()V
-HSPLkotlinx/coroutines/MainCoroutineDispatcher;-><init>()V
-HSPLkotlinx/coroutines/NodeList;-><init>()V
-HSPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList;
-HSPLkotlinx/coroutines/NodeList;->isActive()Z
-HSPLkotlinx/coroutines/NonDisposableHandle;-><clinit>()V
-HSPLkotlinx/coroutines/NonDisposableHandle;-><init>()V
-HSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V
-HSPLkotlinx/coroutines/RemoveOnCancel;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-HSPLkotlinx/coroutines/StandaloneCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Z)V
-HSPLkotlinx/coroutines/SupervisorJobImpl;-><init>(Lkotlinx/coroutines/Job;)V
-HSPLkotlinx/coroutines/ThreadLocalEventLoop;-><clinit>()V
-HSPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoop;
-HSPLkotlinx/coroutines/Unconfined;-><clinit>()V
-HSPLkotlinx/coroutines/Unconfined;-><init>()V
-HSPLkotlinx/coroutines/UndispatchedCoroutine;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlinx/coroutines/UndispatchedMarker;-><clinit>()V
-HSPLkotlinx/coroutines/UndispatchedMarker;-><init>()V
-HSPLkotlinx/coroutines/UndispatchedMarker;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/UndispatchedMarker;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlinx/coroutines/UndispatchedMarker;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
-HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;-><init>()V
-HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher;
-HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;)V
-HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;Z)V
-HSPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
-HSPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded()Z
-HSPLkotlinx/coroutines/android/HandlerDispatcher;-><init>()V
-HSPLkotlinx/coroutines/android/HandlerDispatcherKt;-><clinit>()V
-HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;)Landroid/os/Handler;
-HSPLkotlinx/coroutines/channels/AbstractChannel$Itr;-><init>(Lkotlinx/coroutines/channels/AbstractChannel;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$Itr;->hasNext(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel$Itr;->next()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;I)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;->completeResumeReceive(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;->tryResumeReceive(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;-><init>(Lkotlinx/coroutines/channels/AbstractChannel$Itr;Lkotlinx/coroutines/CancellableContinuationImpl;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;->completeResumeReceive(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;->resumeOnCancellationFun(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1;
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;->tryResumeReceive(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel;-><init>(Lkotlinx/coroutines/channels/AbstractChannel;Lkotlinx/coroutines/channels/Receive;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel;->invoke(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/channels/AbstractChannel;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;->prepare(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/channels/AbstractChannel$receiveCatching$1;-><init>(Lkotlinx/coroutines/channels/AbstractChannel;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$receiveCatching$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel;->enqueueReceiveInternal(Lkotlinx/coroutines/channels/Receive;)Z
-HSPLkotlinx/coroutines/channels/AbstractChannel;->iterator()Lkotlinx/coroutines/channels/ChannelIterator;
-HSPLkotlinx/coroutines/channels/AbstractChannel;->pollInternal()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel;->receive(Lkotlin/coroutines/jvm/internal/SuspendLambda;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel;->receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel;->receiveSuspend(ILkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel;->takeFirstReceiveOrPeekClosed()Lkotlinx/coroutines/channels/ReceiveOrClosed;
-HSPLkotlinx/coroutines/channels/AbstractChannel;->tryReceive-PtdJZtk()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannelKt;-><clinit>()V
-HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;-><init>(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->completeResumeSend()V
-HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->getPollResult()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->tryResumeSend()Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;-><clinit>()V
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->getClosedForSend()Lkotlinx/coroutines/channels/Closed;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->takeFirstReceiveOrPeekClosed()Lkotlinx/coroutines/channels/ReceiveOrClosed;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->takeFirstSendOrPeekClosed()Lkotlinx/coroutines/channels/Send;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ArrayChannel;-><init>(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/channels/ArrayChannel;->enqueueReceiveInternal(Lkotlinx/coroutines/channels/Receive;)Z
-HSPLkotlinx/coroutines/channels/ArrayChannel;->isBufferAlwaysEmpty()Z
-HSPLkotlinx/coroutines/channels/ArrayChannel;->isBufferEmpty()Z
-HSPLkotlinx/coroutines/channels/ArrayChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ArrayChannel;->pollInternal()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/BufferOverflow;-><clinit>()V
-HSPLkotlinx/coroutines/channels/BufferOverflow;-><init>(ILjava/lang/String;)V
-HSPLkotlinx/coroutines/channels/Channel$Factory;-><clinit>()V
-HSPLkotlinx/coroutines/channels/Channel$Factory;-><init>()V
-HSPLkotlinx/coroutines/channels/Channel;-><clinit>()V
-HSPLkotlinx/coroutines/channels/ChannelCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/AbstractChannel;)V
-HSPLkotlinx/coroutines/channels/ChannelCoroutine;->receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ChannelCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ChannelKt;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;I)Lkotlinx/coroutines/channels/AbstractChannel;
-HSPLkotlinx/coroutines/channels/ChannelKt;->invokeComposable(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)V
-HSPLkotlinx/coroutines/channels/ChannelResult$Failed;-><init>()V
-HSPLkotlinx/coroutines/channels/ChannelResult;-><clinit>()V
-HSPLkotlinx/coroutines/channels/ChannelResult;-><init>(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/channels/ChannelResult;->getOrThrow-impl(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/channels/ConflatedChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/channels/ConflatedChannel;->enqueueReceiveInternal(Lkotlinx/coroutines/channels/Receive;)Z
-HSPLkotlinx/coroutines/channels/ConflatedChannel;->isBufferAlwaysEmpty()Z
-HSPLkotlinx/coroutines/channels/ConflatedChannel;->isBufferEmpty()Z
-HSPLkotlinx/coroutines/channels/ConflatedChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ConflatedChannel;->pollInternal()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/LinkedListChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/channels/LinkedListChannel;->isBufferAlwaysEmpty()Z
-HSPLkotlinx/coroutines/channels/LinkedListChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ProducerCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/AbstractChannel;)V
-HSPLkotlinx/coroutines/channels/Receive;-><init>()V
-HSPLkotlinx/coroutines/channels/Receive;->getOfferResult()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/Receive;->resumeOnCancellationFun(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1;
-HSPLkotlinx/coroutines/channels/RendezvousChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/channels/RendezvousChannel;->isBufferAlwaysEmpty()Z
-HSPLkotlinx/coroutines/channels/Send;-><init>()V
-HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;-><init>(Lkotlinx/coroutines/flow/AbstractFlow;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/AbstractFlow;-><init>()V
-HSPLkotlinx/coroutines/flow/AbstractFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V
-HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/DistinctFlowImpl;-><init>(Lkotlinx/coroutines/flow/Flow;)V
-HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState;
-HSPLkotlinx/coroutines/flow/FlowKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt;->mutableStateOf$default(Ljava/lang/Object;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;
-HSPLkotlinx/coroutines/flow/FlowKt;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;
-HSPLkotlinx/coroutines/flow/FlowKt;->observeDerivedStateRecalculations(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
-HSPLkotlinx/coroutines/flow/FlowKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;
-HSPLkotlinx/coroutines/flow/FlowKt;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/SafeFlow;
-HSPLkotlinx/coroutines/flow/FlowKt;->stateIn(Lkotlinx/coroutines/flow/SafeFlow;Lkotlinx/coroutines/internal/ContextScope;Lkotlinx/coroutines/flow/StartedWhileSubscribed;Ljava/lang/Float;)Lkotlinx/coroutines/flow/ReadonlyStateFlow;
-HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ProducerCoroutine;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;-><clinit>()V
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;-><init>()V
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;-><clinit>()V
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;-><init>()V
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;)V
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;-><init>(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/Ref$ObjectRef;)V
-HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;-><init>(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlinx/coroutines/StandaloneCoroutine;)V
-HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SafeFlow;-><init>(Lkotlin/jvm/functions/Function2;)V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;-><init>(IILkotlinx/coroutines/channels/BufferOverflow;)V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->cleanupTailLocked()V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/intrinsics/CoroutineSingletons;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->enqueueLocked(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->findSlotsToResumeLocked([Lkotlin/coroutines/Continuation;)[Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getHead()J
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer(II[Ljava/lang/Object;)[Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmit(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitLocked(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowSlot;)J
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryTakeValue(Lkotlinx/coroutines/flow/SharedFlowSlot;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateBufferLocked(JJJJ)V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateCollectorIndexLocked$kotlinx_coroutines_core(J)[Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/SharedFlowKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/SharedFlowSlot;-><init>()V
-HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)Z
-HSPLkotlinx/coroutines/flow/SharingCommand;-><clinit>()V
-HSPLkotlinx/coroutines/flow/SharingCommand;-><init>(ILjava/lang/String;)V
-HSPLkotlinx/coroutines/flow/SharingConfig;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;)V
-HSPLkotlinx/coroutines/flow/SharingStarted$Companion;-><clinit>()V
-HSPLkotlinx/coroutines/flow/StartedEagerly;-><init>()V
-HSPLkotlinx/coroutines/flow/StartedLazily;-><init>()V
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;-><init>(Lkotlinx/coroutines/flow/StartedWhileSubscribed;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;-><init>(JJ)V
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StateFlowImpl;-><init>(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/flow/StateFlowKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/StateFlowSlot;-><clinit>()V
-HSPLkotlinx/coroutines/flow/StateFlowSlot;-><init>()V
-HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)Z
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSubscriptionCount()Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow;-><init>(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;-><init>(ILkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/flow/Flow;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/NopCollector;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/NopCollector;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/NullSurrogateKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SafeCollector;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;-><init>(Lkotlinx/coroutines/flow/internal/SafeCollector;)V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SendingCollector;-><init>(Lkotlinx/coroutines/channels/SendChannel;)V
-HSPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;-><init>(I)V
-HSPLkotlinx/coroutines/internal/AtomicKt;-><clinit>()V
-HSPLkotlinx/coroutines/internal/AtomicOp;-><clinit>()V
-HSPLkotlinx/coroutines/internal/AtomicOp;-><init>()V
-HSPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/internal/ContextScope;-><init>(Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;-><clinit>()V
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/jvm/internal/ContinuationImpl;)V
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->claimReusableCancellableContinuation()Lkotlinx/coroutines/CancellableContinuationImpl;
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->isReusable()Z
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->postponeCancellation(Ljava/lang/Throwable;)Z
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->release()V
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->tryReleaseClaimedContinuation(Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;-><clinit>()V
-HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/internal/LimitedDispatcher;-><init>(Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler;I)V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;-><init>()V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->isRemoved()Z
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><clinit>()V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><init>()V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListHead;)Z
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNext()Ljava/lang/Object;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNextNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getPrevNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->isRemoved()Z
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->remove$1()Z
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeOrNext()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->tryCondAddNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;)I
-HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><clinit>()V
-HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><init>()V
-HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><clinit>()V
-HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><init>(IZ)V
-HSPLkotlinx/coroutines/internal/MainDispatcherLoader$$ExternalSyntheticServiceLoad0;->m()Ljava/util/Iterator;
-HSPLkotlinx/coroutines/internal/MainDispatcherLoader;-><clinit>()V
-HSPLkotlinx/coroutines/internal/OpDescriptor;-><init>()V
-HSPLkotlinx/coroutines/internal/Removed;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-HSPLkotlinx/coroutines/internal/ResizableAtomicArray;-><init>(I)V
-HSPLkotlinx/coroutines/internal/ScopeCoroutine;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z
-HSPLkotlinx/coroutines/internal/Symbol;-><init>(Ljava/lang/String;)V
-HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;-><clinit>()V
-HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;-><clinit>()V
-HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;-><init>()V
-HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/internal/ThreadContextKt;-><clinit>()V
-HSPLkotlinx/coroutines/internal/ThreadContextKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/internal/ThreadContextKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/internal/ThreadContextKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Lkotlinx/coroutines/internal/ScopeCoroutine;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><clinit>()V
-HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><init>(IIJLjava/lang/String;)V
-HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;-><clinit>()V
-HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;-><init>()V
-HSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><clinit>()V
-HSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><init>()V
-HSPLkotlinx/coroutines/scheduling/GlobalQueue;-><init>()V
-HSPLkotlinx/coroutines/scheduling/NanoTimeSource;-><clinit>()V
-HSPLkotlinx/coroutines/scheduling/NanoTimeSource;-><init>()V
-HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;-><init>(IIJ)V
-HSPLkotlinx/coroutines/scheduling/SchedulerTimeSource;-><init>()V
-HSPLkotlinx/coroutines/scheduling/Task;-><init>()V
-HSPLkotlinx/coroutines/scheduling/TaskContextImpl;-><init>(I)V
-HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->afterTask()V
-HSPLkotlinx/coroutines/scheduling/TasksKt;-><clinit>()V
-HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><clinit>()V
-HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><init>()V
-HSPLkotlinx/coroutines/sync/Empty;-><init>(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/sync/MutexImpl$LockCont$tryResumeLockWaiter$1;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$LockCont;)V
-HSPLkotlinx/coroutines/sync/MutexImpl$LockCont;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuationImpl;)V
-HSPLkotlinx/coroutines/sync/MutexImpl$LockCont;->completeResumeLockWaiter()V
-HSPLkotlinx/coroutines/sync/MutexImpl$LockCont;->tryResumeLockWaiter()Z
-HSPLkotlinx/coroutines/sync/MutexImpl$LockWaiter;-><clinit>()V
-HSPLkotlinx/coroutines/sync/MutexImpl$LockWaiter;-><init>(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/sync/MutexImpl$LockedQueue;-><init>(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/sync/MutexImpl$UnlockOp;-><init>(Lkotlinx/coroutines/sync/MutexImpl$LockedQueue;)V
-HSPLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->prepare(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/sync/MutexImpl;-><clinit>()V
-HSPLkotlinx/coroutines/sync/MutexImpl;-><init>(Z)V
-HSPLkotlinx/coroutines/sync/MutexImpl;->lock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/sync/MutexKt;-><clinit>()V
-Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;
-Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;
-Landroidx/activity/ComponentActivity$$ExternalSyntheticOutline0;
-Landroidx/activity/ComponentActivity$1;
-Landroidx/activity/ComponentActivity$2;
-Landroidx/activity/ComponentActivity$3;
-Landroidx/activity/ComponentActivity$4;
-Landroidx/activity/ComponentActivity$5;
-Landroidx/activity/ComponentActivity$NonConfigurationInstances;
-Landroidx/activity/ComponentActivity;
-Landroidx/activity/OnBackPressedDispatcher;
-Landroidx/activity/compose/ComponentActivityKt;
-Landroidx/activity/contextaware/ContextAwareHelper;
-Landroidx/activity/contextaware/OnContextAvailableListener;
-Landroidx/activity/result/ActivityResultRegistry;
-Landroidx/arch/core/executor/ArchTaskExecutor;
-Landroidx/arch/core/executor/DefaultTaskExecutor$1;
-Landroidx/arch/core/executor/DefaultTaskExecutor;
-Landroidx/arch/core/executor/TaskExecutor;
-Landroidx/arch/core/internal/FastSafeIterableMap;
-Landroidx/arch/core/internal/SafeIterableMap$AscendingIterator;
-Landroidx/arch/core/internal/SafeIterableMap$Entry;
-Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;
-Landroidx/arch/core/internal/SafeIterableMap$ListIterator;
-Landroidx/arch/core/internal/SafeIterableMap$SupportRemove;
-Landroidx/arch/core/internal/SafeIterableMap;
-Landroidx/collection/ArraySet;
-Landroidx/collection/ContainerHelpers;
-Landroidx/collection/SimpleArrayMap;
-Landroidx/collection/SparseArrayCompat;
-Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;
-Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;
-Landroidx/compose/animation/ColorVectorConverterKt;
-Landroidx/compose/animation/FlingCalculator;
-Landroidx/compose/animation/FlingCalculatorKt;
-Landroidx/compose/animation/SingleValueAnimationKt;
-Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;
-Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;
-Landroidx/compose/animation/core/Animatable$runAnimation$2$1;
-Landroidx/compose/animation/core/Animatable$runAnimation$2;
-Landroidx/compose/animation/core/Animatable;
-Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;
-Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;
-Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;
-Landroidx/compose/animation/core/AnimateAsStateKt;
-Landroidx/compose/animation/core/Animation;
-Landroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;
-Landroidx/compose/animation/core/AnimationResult;
-Landroidx/compose/animation/core/AnimationScope;
-Landroidx/compose/animation/core/AnimationSpec;
-Landroidx/compose/animation/core/AnimationState;
-Landroidx/compose/animation/core/AnimationVector1D;
-Landroidx/compose/animation/core/AnimationVector4D;
-Landroidx/compose/animation/core/AnimationVector;
-Landroidx/compose/animation/core/Animations;
-Landroidx/compose/animation/core/ComplexDouble;
-Landroidx/compose/animation/core/ComplexDoubleKt;
-Landroidx/compose/animation/core/DecayAnimationSpec;
-Landroidx/compose/animation/core/DecayAnimationSpecImpl;
-Landroidx/compose/animation/core/FiniteAnimationSpec;
-Landroidx/compose/animation/core/FloatAnimationSpec;
-Landroidx/compose/animation/core/FloatDecayAnimationSpec;
-Landroidx/compose/animation/core/FloatSpringSpec;
-Landroidx/compose/animation/core/MutatorMutex$Mutator;
-Landroidx/compose/animation/core/MutatorMutex$mutate$2;
-Landroidx/compose/animation/core/MutatorMutex;
-Landroidx/compose/animation/core/SpringSimulation;
-Landroidx/compose/animation/core/SpringSpec;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$3;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$6;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$7;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$9;
-Landroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;
-Landroidx/compose/animation/core/SuspendAnimationKt;
-Landroidx/compose/animation/core/TargetBasedAnimation;
-Landroidx/compose/animation/core/TwoWayConverter;
-Landroidx/compose/animation/core/TwoWayConverterImpl;
-Landroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt;
-Landroidx/compose/animation/core/VectorizedAnimationSpec;
-Landroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;
-Landroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;
-Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
-Landroidx/compose/animation/core/VectorizedFloatAnimationSpec;
-Landroidx/compose/animation/core/VectorizedSpringSpec;
-Landroidx/compose/animation/core/VisibilityThresholdsKt;
-Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;
-Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;
-Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;
-Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;
-Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;
-Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;
-Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;
-Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;
-Landroidx/compose/foundation/AndroidOverscrollKt;
-Landroidx/compose/foundation/Api31Impl$$ExternalSyntheticApiModelOutline1;
-Landroidx/compose/foundation/Api31Impl;
-Landroidx/compose/foundation/Background;
-Landroidx/compose/foundation/BackgroundKt;
-Landroidx/compose/foundation/BorderCache;
-Landroidx/compose/foundation/BorderKt$border$2$1;
-Landroidx/compose/foundation/BorderKt$border$2;
-Landroidx/compose/foundation/BorderKt$drawContentWithoutBorder$1;
-Landroidx/compose/foundation/BorderKt$drawGenericBorder$1;
-Landroidx/compose/foundation/BorderKt$drawRectBorder$1;
-Landroidx/compose/foundation/BorderKt$drawRoundRectBorder$1;
-Landroidx/compose/foundation/BorderKt$drawRoundRectBorder$2;
-Landroidx/compose/foundation/BorderKt;
-Landroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;
-Landroidx/compose/foundation/ClickableKt$clickable$2;
-Landroidx/compose/foundation/ClickableKt$clickable$4$1$1;
-Landroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;
-Landroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;
-Landroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;
-Landroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;
-Landroidx/compose/foundation/ClickableKt$clickable$4;
-Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1$1;
-Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;
-Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1;
-Landroidx/compose/foundation/ClickableKt;
-Landroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;
-Landroidx/compose/foundation/Clickable_androidKt;
-Landroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;
-Landroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;
-Landroidx/compose/foundation/ClipScrollableContainerKt;
-Landroidx/compose/foundation/DefaultDebugIndication$DefaultDebugIndicationInstance;
-Landroidx/compose/foundation/DefaultDebugIndication;
-Landroidx/compose/foundation/DrawOverscrollModifier;
-Landroidx/compose/foundation/EdgeEffectCompat;
-Landroidx/compose/foundation/FocusableKt$focusGroup$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$1$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$2;
-Landroidx/compose/foundation/FocusableKt$focusable$2$3$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$3$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$4$1$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$4$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$5$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$5$2;
-Landroidx/compose/foundation/FocusableKt$focusable$2$5;
-Landroidx/compose/foundation/FocusableKt$focusable$2;
-Landroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2$1;
-Landroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2;
-Landroidx/compose/foundation/FocusableKt;
-Landroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;
-Landroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;
-Landroidx/compose/foundation/FocusedBoundsKt;
-Landroidx/compose/foundation/FocusedBoundsModifier;
-Landroidx/compose/foundation/FocusedBoundsObserverModifier;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$1$1;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$2$1;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$3$1;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$3;
-Landroidx/compose/foundation/HoverableKt$hoverable$2;
-Landroidx/compose/foundation/ImageKt$Image$2$measure$1;
-Landroidx/compose/foundation/ImageKt$Image$2;
-Landroidx/compose/foundation/ImageKt$Image$3;
-Landroidx/compose/foundation/ImageKt$Image$semantics$1$1;
-Landroidx/compose/foundation/ImageKt;
-Landroidx/compose/foundation/Indication;
-Landroidx/compose/foundation/IndicationInstance;
-Landroidx/compose/foundation/IndicationKt$LocalIndication$1;
-Landroidx/compose/foundation/IndicationKt$indication$2;
-Landroidx/compose/foundation/IndicationKt;
-Landroidx/compose/foundation/IndicationModifier;
-Landroidx/compose/foundation/MutatePriority;
-Landroidx/compose/foundation/MutatorMutex$Mutator;
-Landroidx/compose/foundation/MutatorMutex$mutateWith$2;
-Landroidx/compose/foundation/MutatorMutex;
-Landroidx/compose/foundation/OverscrollConfiguration;
-Landroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;
-Landroidx/compose/foundation/OverscrollConfigurationKt;
-Landroidx/compose/foundation/OverscrollEffect;
-Landroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;
-Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;
-Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1;
-Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2;
-Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;
-Landroidx/compose/foundation/ScrollKt$scroll$2;
-Landroidx/compose/foundation/ScrollState$Companion$Saver$1;
-Landroidx/compose/foundation/ScrollState$Companion$Saver$2;
-Landroidx/compose/foundation/ScrollState$canScrollBackward$2;
-Landroidx/compose/foundation/ScrollState$canScrollForward$2;
-Landroidx/compose/foundation/ScrollState$scrollableState$1;
-Landroidx/compose/foundation/ScrollState;
-Landroidx/compose/foundation/ScrollingLayoutModifier$measure$1;
-Landroidx/compose/foundation/ScrollingLayoutModifier;
-Landroidx/compose/foundation/gestures/AndroidConfig;
-Landroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;
-Landroidx/compose/foundation/gestures/ContentInViewModifier$Request;
-Landroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;
-Landroidx/compose/foundation/gestures/ContentInViewModifier;
-Landroidx/compose/foundation/gestures/DefaultFlingBehavior;
-Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;
-Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;
-Landroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;
-Landroidx/compose/foundation/gestures/DefaultScrollableState;
-Landroidx/compose/foundation/gestures/DragLogic;
-Landroidx/compose/foundation/gestures/DragScope;
-Landroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$6;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9;
-Landroidx/compose/foundation/gestures/DraggableKt;
-Landroidx/compose/foundation/gestures/DraggableState;
-Landroidx/compose/foundation/gestures/FlingBehavior;
-Landroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;
-Landroidx/compose/foundation/gestures/ForEachGestureKt;
-Landroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;
-Landroidx/compose/foundation/gestures/Orientation;
-Landroidx/compose/foundation/gestures/PressGestureScope;
-Landroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;
-Landroidx/compose/foundation/gestures/PressGestureScopeImpl;
-Landroidx/compose/foundation/gestures/ScrollConfig;
-Landroidx/compose/foundation/gestures/ScrollDraggableState;
-Landroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$1;
-Landroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$2$1;
-Landroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$2;
-Landroidx/compose/foundation/gestures/ScrollExtensionsKt;
-Landroidx/compose/foundation/gestures/ScrollScope;
-Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;
-Landroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1;
-Landroidx/compose/foundation/gestures/ScrollableKt;
-Landroidx/compose/foundation/gestures/ScrollableState;
-Landroidx/compose/foundation/gestures/ScrollingLogic;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$NoPressGesture$1;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt;
-Landroidx/compose/foundation/gestures/UpdatableAnimationState;
-Landroidx/compose/foundation/interaction/FocusInteraction$Focus;
-Landroidx/compose/foundation/interaction/FocusInteraction$Unfocus;
-Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;
-Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;
-Landroidx/compose/foundation/interaction/HoverInteractionKt$collectIsHoveredAsState$1$1$1;
-Landroidx/compose/foundation/interaction/HoverInteractionKt$collectIsHoveredAsState$1$1;
-Landroidx/compose/foundation/interaction/Interaction;
-Landroidx/compose/foundation/interaction/InteractionSource;
-Landroidx/compose/foundation/interaction/MutableInteractionSource;
-Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;
-Landroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1$1;
-Landroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;
-Landroidx/compose/foundation/layout/Arrangement$Bottom$1;
-Landroidx/compose/foundation/layout/Arrangement$Center$1;
-Landroidx/compose/foundation/layout/Arrangement$End$1;
-Landroidx/compose/foundation/layout/Arrangement$Horizontal;
-Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical;
-Landroidx/compose/foundation/layout/Arrangement$SpaceAround$1;
-Landroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;
-Landroidx/compose/foundation/layout/Arrangement$SpaceEvenly$1;
-Landroidx/compose/foundation/layout/Arrangement$SpacedAligned;
-Landroidx/compose/foundation/layout/Arrangement$Start$1;
-Landroidx/compose/foundation/layout/Arrangement$Top$1;
-Landroidx/compose/foundation/layout/Arrangement$Vertical;
-Landroidx/compose/foundation/layout/Arrangement$spacedBy$1;
-Landroidx/compose/foundation/layout/Arrangement;
-Landroidx/compose/foundation/layout/BoxChildData;
-Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;
-Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;
-Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;
-Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;
-Landroidx/compose/foundation/layout/BoxKt;
-Landroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;
-Landroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;
-Landroidx/compose/foundation/layout/ColumnKt;
-Landroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;
-Landroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment;
-Landroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment;
-Landroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment;
-Landroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;
-Landroidx/compose/foundation/layout/CrossAxisAlignment;
-Landroidx/compose/foundation/layout/FillModifier$measure$1;
-Landroidx/compose/foundation/layout/FillModifier;
-Landroidx/compose/foundation/layout/HorizontalAlignModifier;
-Landroidx/compose/foundation/layout/IntrinsicMeasureBlocks$HorizontalMaxHeight$1$1;
-Landroidx/compose/foundation/layout/IntrinsicMeasureBlocks$HorizontalMaxHeight$1$2;
-Landroidx/compose/foundation/layout/IntrinsicMeasureBlocks$HorizontalMaxHeight$1;
-Landroidx/compose/foundation/layout/OffsetModifier$measure$1;
-Landroidx/compose/foundation/layout/OffsetModifier;
-Landroidx/compose/foundation/layout/OrientationIndependentConstraints$$ExternalSyntheticOutline0;
-Landroidx/compose/foundation/layout/PaddingKt;
-Landroidx/compose/foundation/layout/PaddingModifier$measure$1;
-Landroidx/compose/foundation/layout/PaddingModifier;
-Landroidx/compose/foundation/layout/PaddingValues;
-Landroidx/compose/foundation/layout/PaddingValuesImpl;
-Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;
-Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;
-Landroidx/compose/foundation/layout/RowColumnImplKt;
-Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;
-Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;
-Landroidx/compose/foundation/layout/RowColumnParentData;
-Landroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;
-Landroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;
-Landroidx/compose/foundation/layout/RowKt;
-Landroidx/compose/foundation/layout/RowScope;
-Landroidx/compose/foundation/layout/RowScopeInstance;
-Landroidx/compose/foundation/layout/SizeKt$createFillSizeModifier$1;
-Landroidx/compose/foundation/layout/SizeKt$createFillWidthModifier$1;
-Landroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;
-Landroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$2;
-Landroidx/compose/foundation/layout/SizeKt;
-Landroidx/compose/foundation/layout/SizeModifier$measure$1;
-Landroidx/compose/foundation/layout/SizeModifier;
-Landroidx/compose/foundation/layout/SpacerKt;
-Landroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;
-Landroidx/compose/foundation/layout/SpacerMeasurePolicy;
-Landroidx/compose/foundation/layout/WrapContentModifier$measure$1;
-Landroidx/compose/foundation/layout/WrapContentModifier;
-Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider$Item$1;
-Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;
-Landroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;
-Landroidx/compose/foundation/lazy/layout/DefaultLazyKey;
-Landroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;
-Landroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;
-Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
-Landroidx/compose/foundation/lazy/layout/IntervalList;
-Landroidx/compose/foundation/lazy/layout/IntervalListKt;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutKt;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt;
-Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;
-Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;
-Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;
-Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt;
-Landroidx/compose/foundation/lazy/layout/MutableIntervalList;
-Landroidx/compose/foundation/relocation/AndroidBringIntoViewParent;
-Landroidx/compose/foundation/relocation/BringIntoViewChildModifier;
-Landroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;
-Landroidx/compose/foundation/relocation/BringIntoViewKt;
-Landroidx/compose/foundation/relocation/BringIntoViewParent;
-Landroidx/compose/foundation/relocation/BringIntoViewRequester;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier$bringIntoView$2;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;
-Landroidx/compose/foundation/relocation/BringIntoViewResponder;
-Landroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;
-Landroidx/compose/foundation/relocation/BringIntoViewResponderKt;
-Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$1$1;
-Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$1;
-Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$2;
-Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2;
-Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$parentRect$1;
-Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier;
-Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;
-Landroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;
-Landroidx/compose/foundation/shape/CornerBasedShape;
-Landroidx/compose/foundation/shape/CornerSize;
-Landroidx/compose/foundation/shape/DpCornerSize;
-Landroidx/compose/foundation/shape/PercentCornerSize;
-Landroidx/compose/foundation/shape/RoundedCornerShape;
-Landroidx/compose/foundation/shape/RoundedCornerShapeKt;
-Landroidx/compose/foundation/text/BasicTextKt$BasicText$1;
-Landroidx/compose/foundation/text/BasicTextKt$BasicText$2;
-Landroidx/compose/foundation/text/BasicTextKt$BasicText$selectableId$1;
-Landroidx/compose/foundation/text/BasicTextKt$BasicText-4YKlhWE$$inlined$Layout$1;
-Landroidx/compose/foundation/text/BasicTextKt$selectionIdSaver$1;
-Landroidx/compose/foundation/text/BasicTextKt$selectionIdSaver$2;
-Landroidx/compose/foundation/text/BasicTextKt;
-Landroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;
-Landroidx/compose/foundation/text/HeightInLinesModifierKt;
-Landroidx/compose/foundation/text/TextController$coreModifiers$1;
-Landroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1$1;
-Landroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1;
-Landroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;
-Landroidx/compose/foundation/text/TextController$measurePolicy$1$measure$2;
-Landroidx/compose/foundation/text/TextController$measurePolicy$1;
-Landroidx/compose/foundation/text/TextController$update$1;
-Landroidx/compose/foundation/text/TextController$update$2;
-Landroidx/compose/foundation/text/TextController;
-Landroidx/compose/foundation/text/TextDelegate;
-Landroidx/compose/foundation/text/TextDelegateKt;
-Landroidx/compose/foundation/text/TextDragObserver;
-Landroidx/compose/foundation/text/TextState$onTextLayout$1;
-Landroidx/compose/foundation/text/TextState;
-Landroidx/compose/foundation/text/selection/SelectionRegistrar;
-Landroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;
-Landroidx/compose/foundation/text/selection/SelectionRegistrarKt;
-Landroidx/compose/foundation/text/selection/TextSelectionColors;
-Landroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;
-Landroidx/compose/foundation/text/selection/TextSelectionColorsKt;
-Landroidx/compose/material3/ColorScheme$$ExternalSyntheticOutline0;
-Landroidx/compose/material3/TextKt$LocalTextStyle$1;
-Landroidx/compose/material3/TextKt$Text$1;
-Landroidx/compose/material3/TextKt;
-Landroidx/compose/runtime/AbstractApplier;
-Landroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;
-Landroidx/compose/runtime/ActualAndroid_androidKt;
-Landroidx/compose/runtime/Anchor;
-Landroidx/compose/runtime/Applier;
-Landroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;
-Landroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;
-Landroidx/compose/runtime/BroadcastFrameClock;
-Landroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;
-Landroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;
-Landroidx/compose/runtime/ComposableSingletons$CompositionKt;
-Landroidx/compose/runtime/ComposablesKt;
-Landroidx/compose/runtime/Composer$Companion$Empty$1;
-Landroidx/compose/runtime/Composer$Companion;
-Landroidx/compose/runtime/Composer;
-Landroidx/compose/runtime/ComposerImpl$CompositionContextHolder;
-Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;
-Landroidx/compose/runtime/ComposerImpl$apply$operation$1$$ExternalSyntheticOutline0;
-Landroidx/compose/runtime/ComposerImpl$apply$operation$1;
-Landroidx/compose/runtime/ComposerImpl$createNode$2;
-Landroidx/compose/runtime/ComposerImpl$createNode$3;
-Landroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$1;
-Landroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$2;
-Landroidx/compose/runtime/ComposerImpl$doCompose$2$3;
-Landroidx/compose/runtime/ComposerImpl$doCompose$2$4;
-Landroidx/compose/runtime/ComposerImpl$doCompose$2$5;
-Landroidx/compose/runtime/ComposerImpl$doCompose$lambda$37$$inlined$sortBy$1;
-Landroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;
-Landroidx/compose/runtime/ComposerImpl$realizeDowns$1;
-Landroidx/compose/runtime/ComposerImpl$realizeMovement$1;
-Landroidx/compose/runtime/ComposerImpl$realizeMovement$2;
-Landroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;
-Landroidx/compose/runtime/ComposerImpl$realizeUps$1;
-Landroidx/compose/runtime/ComposerImpl$recordInsert$1;
-Landroidx/compose/runtime/ComposerImpl$recordInsert$2;
-Landroidx/compose/runtime/ComposerImpl$recordSideEffect$1;
-Landroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;
-Landroidx/compose/runtime/ComposerImpl$start$2;
-Landroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;
-Landroidx/compose/runtime/ComposerImpl$startReaderGroup$1;
-Landroidx/compose/runtime/ComposerImpl$updateValue$1;
-Landroidx/compose/runtime/ComposerImpl$updateValue$2;
-Landroidx/compose/runtime/ComposerImpl;
-Landroidx/compose/runtime/ComposerKt$endGroupInstance$1;
-Landroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;
-Landroidx/compose/runtime/ComposerKt$startRootGroup$1;
-Landroidx/compose/runtime/ComposerKt;
-Landroidx/compose/runtime/Composition;
-Landroidx/compose/runtime/CompositionContext;
-Landroidx/compose/runtime/CompositionContextKt;
-Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;
-Landroidx/compose/runtime/CompositionImpl;
-Landroidx/compose/runtime/CompositionKt;
-Landroidx/compose/runtime/CompositionLocal;
-Landroidx/compose/runtime/CompositionLocalKt;
-Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;
-Landroidx/compose/runtime/ControlledComposition;
-Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
-Landroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;
-Landroidx/compose/runtime/DerivedSnapshotState;
-Landroidx/compose/runtime/DerivedState;
-Landroidx/compose/runtime/DisposableEffectImpl;
-Landroidx/compose/runtime/DisposableEffectResult;
-Landroidx/compose/runtime/DisposableEffectScope;
-Landroidx/compose/runtime/DynamicProvidableCompositionLocal;
-Landroidx/compose/runtime/EffectsKt;
-Landroidx/compose/runtime/GroupInfo;
-Landroidx/compose/runtime/IntStack;
-Landroidx/compose/runtime/Invalidation;
-Landroidx/compose/runtime/JoinedKey;
-Landroidx/compose/runtime/KeyInfo;
-Landroidx/compose/runtime/Latch;
-Landroidx/compose/runtime/LaunchedEffectImpl;
-Landroidx/compose/runtime/LazyValueHolder;
-Landroidx/compose/runtime/MonotonicFrameClock$Key;
-Landroidx/compose/runtime/MonotonicFrameClock;
-Landroidx/compose/runtime/MonotonicFrameClockKt;
-Landroidx/compose/runtime/MovableContent;
-Landroidx/compose/runtime/MovableContentState;
-Landroidx/compose/runtime/MovableContentStateReference;
-Landroidx/compose/runtime/MutableState;
-Landroidx/compose/runtime/NeverEqualPolicy;
-Landroidx/compose/runtime/OpaqueKey;
-Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;
-Landroidx/compose/runtime/ParcelableSnapshotMutableState;
-Landroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;
-Landroidx/compose/runtime/PausableMonotonicFrameClock;
-Landroidx/compose/runtime/Pending$keyMap$2;
-Landroidx/compose/runtime/Pending;
-Landroidx/compose/runtime/PrioritySet;
-Landroidx/compose/runtime/ProvidableCompositionLocal;
-Landroidx/compose/runtime/ProvidedValue;
-Landroidx/compose/runtime/RecomposeScope;
-Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2;
-Landroidx/compose/runtime/RecomposeScopeImpl;
-Landroidx/compose/runtime/Recomposer$Companion;
-Landroidx/compose/runtime/Recomposer$RecomposerErrorState;
-Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;
-Landroidx/compose/runtime/Recomposer$State;
-Landroidx/compose/runtime/Recomposer$broadcastFrameClock$1;
-Landroidx/compose/runtime/Recomposer$effectJob$1$1;
-Landroidx/compose/runtime/Recomposer$join$2;
-Landroidx/compose/runtime/Recomposer$performRecompose$1$1;
-Landroidx/compose/runtime/Recomposer$readObserverOf$1;
-Landroidx/compose/runtime/Recomposer$recompositionRunner$2$2;
-Landroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;
-Landroidx/compose/runtime/Recomposer$recompositionRunner$2;
-Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$2;
-Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;
-Landroidx/compose/runtime/Recomposer$writeObserverOf$1;
-Landroidx/compose/runtime/Recomposer;
-Landroidx/compose/runtime/ReferentialEqualityPolicy;
-Landroidx/compose/runtime/RememberManager;
-Landroidx/compose/runtime/RememberObserver;
-Landroidx/compose/runtime/SkippableUpdater;
-Landroidx/compose/runtime/SlotReader;
-Landroidx/compose/runtime/SlotTable;
-Landroidx/compose/runtime/SlotTableKt;
-Landroidx/compose/runtime/SlotWriter$Companion;
-Landroidx/compose/runtime/SlotWriter$groupSlots$1;
-Landroidx/compose/runtime/SlotWriter;
-Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;
-Landroidx/compose/runtime/SnapshotMutableStateImpl;
-Landroidx/compose/runtime/SnapshotMutationPolicy;
-Landroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;
-Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;
-Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;
-Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;
-Landroidx/compose/runtime/SnapshotThreadLocal;
-Landroidx/compose/runtime/Stack;
-Landroidx/compose/runtime/State;
-Landroidx/compose/runtime/StaticProvidableCompositionLocal;
-Landroidx/compose/runtime/StaticValueHolder;
-Landroidx/compose/runtime/StructuralEqualityPolicy;
-Landroidx/compose/runtime/Updater;
-Landroidx/compose/runtime/collection/IdentityArrayIntMap;
-Landroidx/compose/runtime/collection/IdentityArrayMap;
-Landroidx/compose/runtime/collection/IdentityArraySet;
-Landroidx/compose/runtime/collection/IdentityScopeMap;
-Landroidx/compose/runtime/collection/MutableVector$MutableVectorList;
-Landroidx/compose/runtime/collection/MutableVector$VectorListIterator;
-Landroidx/compose/runtime/collection/MutableVector;
-Landroidx/compose/runtime/collection/MutableVectorKt;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntriesIterator;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;
-Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;
-Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;
-Landroidx/compose/runtime/internal/ComposableLambdaImpl;
-Landroidx/compose/runtime/internal/ComposableLambdaKt;
-Landroidx/compose/runtime/internal/ThreadMap;
-Landroidx/compose/runtime/internal/ThreadMapKt;
-Landroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;
-Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;
-Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;
-Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;
-Landroidx/compose/runtime/saveable/RememberSaveableKt;
-Landroidx/compose/runtime/saveable/SaveableStateHolder;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;
-Landroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;
-Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
-Landroidx/compose/runtime/saveable/SaveableStateRegistry;
-Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
-Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;
-Landroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;
-Landroidx/compose/runtime/saveable/SaveableStateRegistryKt;
-Landroidx/compose/runtime/saveable/Saver;
-Landroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;
-Landroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;
-Landroidx/compose/runtime/saveable/SaverKt$Saver$1;
-Landroidx/compose/runtime/saveable/SaverKt;
-Landroidx/compose/runtime/saveable/SaverScope;
-Landroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;
-Landroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;
-Landroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;
-Landroidx/compose/runtime/snapshots/GlobalSnapshot;
-Landroidx/compose/runtime/snapshots/MutableSnapshot;
-Landroidx/compose/runtime/snapshots/ObserverHandle;
-Landroidx/compose/runtime/snapshots/ReadonlySnapshot;
-Landroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;
-Landroidx/compose/runtime/snapshots/Snapshot$Companion;
-Landroidx/compose/runtime/snapshots/Snapshot;
-Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Failure;
-Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;
-Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
-Landroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;
-Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-Landroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2;
-Landroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;
-Landroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;
-Landroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;
-Landroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;
-Landroidx/compose/runtime/snapshots/SnapshotKt;
-Landroidx/compose/runtime/snapshots/SnapshotMutableState;
-Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
-Landroidx/compose/runtime/snapshots/SnapshotStateList;
-Landroidx/compose/runtime/snapshots/SnapshotStateListKt;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$observeReads$1$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver;
-Landroidx/compose/runtime/snapshots/StateObject;
-Landroidx/compose/runtime/snapshots/StateRecord;
-Landroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;
-Landroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;
-Landroidx/compose/runtime/tooling/InspectionTablesKt;
-Landroidx/compose/ui/Alignment$Companion;
-Landroidx/compose/ui/Alignment$Horizontal;
-Landroidx/compose/ui/Alignment$Vertical;
-Landroidx/compose/ui/Alignment;
-Landroidx/compose/ui/BiasAlignment$Horizontal;
-Landroidx/compose/ui/BiasAlignment$Vertical;
-Landroidx/compose/ui/BiasAlignment;
-Landroidx/compose/ui/CombinedModifier;
-Landroidx/compose/ui/ComposedModifier;
-Landroidx/compose/ui/ComposedModifierKt$materialize$1;
-Landroidx/compose/ui/ComposedModifierKt$materialize$result$1;
-Landroidx/compose/ui/ComposedModifierKt;
-Landroidx/compose/ui/Modifier$Companion;
-Landroidx/compose/ui/Modifier$Element;
-Landroidx/compose/ui/Modifier$Node;
-Landroidx/compose/ui/Modifier;
-Landroidx/compose/ui/MotionDurationScale$Key;
-Landroidx/compose/ui/MotionDurationScale;
-Landroidx/compose/ui/ZIndexModifier$measure$1;
-Landroidx/compose/ui/ZIndexModifier;
-Landroidx/compose/ui/autofill/AndroidAutofill;
-Landroidx/compose/ui/autofill/Autofill;
-Landroidx/compose/ui/autofill/AutofillCallback;
-Landroidx/compose/ui/autofill/AutofillTree;
-Landroidx/compose/ui/draw/BuildDrawCacheParams;
-Landroidx/compose/ui/draw/CacheDrawScope;
-Landroidx/compose/ui/draw/ClipKt;
-Landroidx/compose/ui/draw/DrawBackgroundModifier;
-Landroidx/compose/ui/draw/DrawCacheModifier;
-Landroidx/compose/ui/draw/DrawContentCacheModifier;
-Landroidx/compose/ui/draw/DrawModifier;
-Landroidx/compose/ui/draw/DrawModifierKt$drawBehind$$inlined$modifierElementOf$1;
-Landroidx/compose/ui/draw/DrawModifierKt$drawWithCache$2;
-Landroidx/compose/ui/draw/DrawResult;
-Landroidx/compose/ui/draw/EmptyBuildDrawCacheParams;
-Landroidx/compose/ui/draw/PainterModifier$measure$1;
-Landroidx/compose/ui/draw/PainterModifier;
-Landroidx/compose/ui/focus/BeyondBoundsLayoutKt;
-Landroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/focus/FocusChangedModifierKt;
-Landroidx/compose/ui/focus/FocusChangedModifierNode;
-Landroidx/compose/ui/focus/FocusDirection;
-Landroidx/compose/ui/focus/FocusEventModifier;
-Landroidx/compose/ui/focus/FocusEventModifierNode;
-Landroidx/compose/ui/focus/FocusEventModifierNodeKt;
-Landroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;
-Landroidx/compose/ui/focus/FocusInvalidationManager;
-Landroidx/compose/ui/focus/FocusManager;
-Landroidx/compose/ui/focus/FocusOrderModifier;
-Landroidx/compose/ui/focus/FocusOwner;
-Landroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;
-Landroidx/compose/ui/focus/FocusOwnerImpl$special$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/focus/FocusOwnerImpl;
-Landroidx/compose/ui/focus/FocusProperties;
-Landroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;
-Landroidx/compose/ui/focus/FocusPropertiesImpl$exit$1;
-Landroidx/compose/ui/focus/FocusPropertiesImpl;
-Landroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/focus/FocusPropertiesModifierNode;
-Landroidx/compose/ui/focus/FocusPropertiesModifierNodeImpl;
-Landroidx/compose/ui/focus/FocusRequester;
-Landroidx/compose/ui/focus/FocusRequesterModifier;
-Landroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/focus/FocusRequesterModifierNode;
-Landroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;
-Landroidx/compose/ui/focus/FocusState;
-Landroidx/compose/ui/focus/FocusStateImpl;
-Landroidx/compose/ui/focus/FocusTargetModifierNode$special$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/focus/FocusTargetModifierNode;
-Landroidx/compose/ui/focus/FocusTransactionsKt$grantFocus$1;
-Landroidx/compose/ui/focus/FocusTransactionsKt;
-Landroidx/compose/ui/focus/FocusTraversalKt;
-Landroidx/compose/ui/focus/TwoDimensionalFocusSearchKt$generateAndSearchChildren$1;
-Landroidx/compose/ui/focus/TwoDimensionalFocusSearchKt;
-Landroidx/compose/ui/geometry/CornerRadius;
-Landroidx/compose/ui/geometry/CornerRadiusKt;
-Landroidx/compose/ui/geometry/MutableRect;
-Landroidx/compose/ui/geometry/Offset;
-Landroidx/compose/ui/geometry/OffsetKt;
-Landroidx/compose/ui/geometry/Rect;
-Landroidx/compose/ui/geometry/RoundRect;
-Landroidx/compose/ui/geometry/RoundRectKt;
-Landroidx/compose/ui/geometry/Size;
-Landroidx/compose/ui/geometry/SizeKt;
-Landroidx/compose/ui/graphics/AndroidBlendMode_androidKt;
-Landroidx/compose/ui/graphics/AndroidCanvas;
-Landroidx/compose/ui/graphics/AndroidCanvas_androidKt;
-Landroidx/compose/ui/graphics/AndroidImageBitmap;
-Landroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;
-Landroidx/compose/ui/graphics/AndroidPaint;
-Landroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;
-Landroidx/compose/ui/graphics/AndroidPaint_androidKt;
-Landroidx/compose/ui/graphics/AndroidPath;
-Landroidx/compose/ui/graphics/BlendMode;
-Landroidx/compose/ui/graphics/BlendModeColorFilterHelper;
-Landroidx/compose/ui/graphics/Brush;
-Landroidx/compose/ui/graphics/Canvas;
-Landroidx/compose/ui/graphics/CanvasHolder;
-Landroidx/compose/ui/graphics/Color;
-Landroidx/compose/ui/graphics/ColorFilter;
-Landroidx/compose/ui/graphics/ColorKt;
-Landroidx/compose/ui/graphics/Float16$Companion;
-Landroidx/compose/ui/graphics/Float16;
-Landroidx/compose/ui/graphics/GraphicsLayerModifierKt;
-Landroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;
-Landroidx/compose/ui/graphics/GraphicsLayerScope;
-Landroidx/compose/ui/graphics/GraphicsLayerScopeKt;
-Landroidx/compose/ui/graphics/ImageBitmap;
-Landroidx/compose/ui/graphics/Matrix;
-Landroidx/compose/ui/graphics/Outline$Generic;
-Landroidx/compose/ui/graphics/Outline$Rectangle;
-Landroidx/compose/ui/graphics/Outline$Rounded;
-Landroidx/compose/ui/graphics/Outline;
-Landroidx/compose/ui/graphics/Paint;
-Landroidx/compose/ui/graphics/Path;
-Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;
-Landroidx/compose/ui/graphics/RectangleShapeKt;
-Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;
-Landroidx/compose/ui/graphics/ShaderBrush;
-Landroidx/compose/ui/graphics/Shadow;
-Landroidx/compose/ui/graphics/Shape;
-Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;
-Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;
-Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;
-Landroidx/compose/ui/graphics/SolidColor;
-Landroidx/compose/ui/graphics/TransformOrigin;
-Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;
-Landroidx/compose/ui/graphics/colorspace/Adaptation;
-Landroidx/compose/ui/graphics/colorspace/ColorModel;
-Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-Landroidx/compose/ui/graphics/colorspace/ColorSpaceKt;
-Landroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda0;
-Landroidx/compose/ui/graphics/colorspace/ColorSpaces;
-Landroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;
-Landroidx/compose/ui/graphics/colorspace/Connector$Companion;
-Landroidx/compose/ui/graphics/colorspace/Connector;
-Landroidx/compose/ui/graphics/colorspace/DoubleFunction;
-Landroidx/compose/ui/graphics/colorspace/Illuminant;
-Landroidx/compose/ui/graphics/colorspace/Lab;
-Landroidx/compose/ui/graphics/colorspace/Oklab;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda5;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda6;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda7;
-Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;
-Landroidx/compose/ui/graphics/colorspace/Rgb;
-Landroidx/compose/ui/graphics/colorspace/TransferParameters;
-Landroidx/compose/ui/graphics/colorspace/WhitePoint;
-Landroidx/compose/ui/graphics/colorspace/Xyz;
-Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;
-Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;
-Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;
-Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;
-Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;
-Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;
-Landroidx/compose/ui/graphics/drawscope/DrawContext;
-Landroidx/compose/ui/graphics/drawscope/DrawScope;
-Landroidx/compose/ui/graphics/drawscope/EmptyCanvas;
-Landroidx/compose/ui/graphics/drawscope/Fill;
-Landroidx/compose/ui/graphics/drawscope/Stroke;
-Landroidx/compose/ui/graphics/painter/BitmapPainter;
-Landroidx/compose/ui/graphics/painter/Painter;
-Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;
-Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
-Landroidx/compose/ui/graphics/vector/ImageVector;
-Landroidx/compose/ui/graphics/vector/VNode;
-Landroidx/compose/ui/graphics/vector/VectorComponent;
-Landroidx/compose/ui/graphics/vector/VectorGroup;
-Landroidx/compose/ui/graphics/vector/VectorKt;
-Landroidx/compose/ui/graphics/vector/VectorNode;
-Landroidx/compose/ui/graphics/vector/VectorPainter;
-Landroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;
-Landroidx/compose/ui/graphics/vector/VectorPath;
-Landroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;
-Landroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;
-Landroidx/compose/ui/graphics/vector/compat/XmlVectorParser_androidKt;
-Landroidx/compose/ui/hapticfeedback/HapticFeedback;
-Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;
-Landroidx/compose/ui/input/InputMode;
-Landroidx/compose/ui/input/InputModeManager;
-Landroidx/compose/ui/input/InputModeManagerImpl;
-Landroidx/compose/ui/input/key/Key;
-Landroidx/compose/ui/input/key/KeyEvent;
-Landroidx/compose/ui/input/key/KeyEvent_androidKt;
-Landroidx/compose/ui/input/key/KeyInputInputModifierNodeImpl;
-Landroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/input/key/KeyInputModifierKt;
-Landroidx/compose/ui/input/key/KeyInputModifierNode;
-Landroidx/compose/ui/input/key/Key_androidKt;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$calculateNestedScrollScope$1;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt$nestedScroll$2;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$1;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt;
-Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;
-Landroidx/compose/ui/input/pointer/HitPathTracker;
-Landroidx/compose/ui/input/pointer/MotionEventAdapter;
-Landroidx/compose/ui/input/pointer/Node;
-Landroidx/compose/ui/input/pointer/NodeParent;
-Landroidx/compose/ui/input/pointer/PointerEvent;
-Landroidx/compose/ui/input/pointer/PointerEventPass;
-Landroidx/compose/ui/input/pointer/PointerIconService;
-Landroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;
-Landroidx/compose/ui/input/pointer/PointerInputEventProcessor;
-Landroidx/compose/ui/input/pointer/PointerInputFilter;
-Landroidx/compose/ui/input/pointer/PointerInputModifier;
-Landroidx/compose/ui/input/pointer/PointerInputScope;
-Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers;
-Landroidx/compose/ui/input/pointer/PositionCalculator;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;
-Landroidx/compose/ui/input/pointer/util/DataPointAtTime;
-Landroidx/compose/ui/input/pointer/util/VelocityTracker1D;
-Landroidx/compose/ui/input/pointer/util/VelocityTracker;
-Landroidx/compose/ui/input/rotary/RotaryInputModifierKt$onRotaryScrollEvent$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/input/rotary/RotaryInputModifierNode;
-Landroidx/compose/ui/input/rotary/RotaryInputModifierNodeImpl;
-Landroidx/compose/ui/layout/AlignmentLine;
-Landroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;
-Landroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;
-Landroidx/compose/ui/layout/AlignmentLineKt;
-Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope;
-Landroidx/compose/ui/layout/BeyondBoundsLayout;
-Landroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;
-Landroidx/compose/ui/layout/BeyondBoundsLayoutKt;
-Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;
-Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;
-Landroidx/compose/ui/layout/ContentScale$Companion$FillBounds$1;
-Landroidx/compose/ui/layout/ContentScale$Companion$Fit$1;
-Landroidx/compose/ui/layout/ContentScale$Companion$Inside$1;
-Landroidx/compose/ui/layout/ContentScale$Companion;
-Landroidx/compose/ui/layout/ContentScale;
-Landroidx/compose/ui/layout/HorizontalAlignmentLine;
-Landroidx/compose/ui/layout/IntermediateLayoutModifier;
-Landroidx/compose/ui/layout/IntrinsicMeasurable;
-Landroidx/compose/ui/layout/IntrinsicMeasureScope;
-Landroidx/compose/ui/layout/IntrinsicsMeasureScope;
-Landroidx/compose/ui/layout/LayoutCoordinates;
-Landroidx/compose/ui/layout/LayoutKt$materializerOf$1;
-Landroidx/compose/ui/layout/LayoutKt;
-Landroidx/compose/ui/layout/LayoutModifier;
-Landroidx/compose/ui/layout/LayoutModifierImpl;
-Landroidx/compose/ui/layout/LayoutModifierKt;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$2$1$1;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
-Landroidx/compose/ui/layout/LookaheadLayoutCoordinatesImpl;
-Landroidx/compose/ui/layout/LookaheadOnPlacedModifier;
-Landroidx/compose/ui/layout/Measurable;
-Landroidx/compose/ui/layout/MeasurePolicy;
-Landroidx/compose/ui/layout/MeasureResult;
-Landroidx/compose/ui/layout/MeasureScope$layout$1;
-Landroidx/compose/ui/layout/MeasureScope;
-Landroidx/compose/ui/layout/Measured;
-Landroidx/compose/ui/layout/MeasuringIntrinsics$DefaultIntrinsicMeasurable;
-Landroidx/compose/ui/layout/MeasuringIntrinsics$EmptyPlaceable;
-Landroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;
-Landroidx/compose/ui/layout/OnGloballyPositionedModifier;
-Landroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;
-Landroidx/compose/ui/layout/OnPlacedModifier;
-Landroidx/compose/ui/layout/OnRemeasuredModifier;
-Landroidx/compose/ui/layout/OnSizeChangedModifier;
-Landroidx/compose/ui/layout/ParentDataModifier;
-Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle;
-Landroidx/compose/ui/layout/PinnableContainer;
-Landroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;
-Landroidx/compose/ui/layout/PinnableContainerKt;
-Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;
-Landroidx/compose/ui/layout/Placeable$PlacementScope;
-Landroidx/compose/ui/layout/Placeable;
-Landroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;
-Landroidx/compose/ui/layout/PlaceableKt;
-Landroidx/compose/ui/layout/Remeasurement;
-Landroidx/compose/ui/layout/RemeasurementModifier;
-Landroidx/compose/ui/layout/RootMeasurePolicy$measure$2;
-Landroidx/compose/ui/layout/RootMeasurePolicy;
-Landroidx/compose/ui/layout/ScaleFactor;
-Landroidx/compose/ui/layout/ScaleFactorKt;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt;
-Landroidx/compose/ui/layout/SubcomposeLayoutState$PrecomposedSlotHandle;
-Landroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutState;
-Landroidx/compose/ui/layout/SubcomposeMeasureScope;
-Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;
-Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;
-Landroidx/compose/ui/modifier/BackwardsCompatLocalMap;
-Landroidx/compose/ui/modifier/EmptyMap;
-Landroidx/compose/ui/modifier/ModifierLocal;
-Landroidx/compose/ui/modifier/ModifierLocalConsumer;
-Landroidx/compose/ui/modifier/ModifierLocalManager;
-Landroidx/compose/ui/modifier/ModifierLocalMap;
-Landroidx/compose/ui/modifier/ModifierLocalNode;
-Landroidx/compose/ui/modifier/ModifierLocalProvider;
-Landroidx/compose/ui/modifier/ModifierLocalReadScope;
-Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-Landroidx/compose/ui/node/AlignmentLines;
-Landroidx/compose/ui/node/AlignmentLinesOwner;
-Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;
-Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;
-Landroidx/compose/ui/node/BackwardsCompatNode$updateDrawCache$1;
-Landroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;
-Landroidx/compose/ui/node/BackwardsCompatNode;
-Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;
-Landroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;
-Landroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;
-Landroidx/compose/ui/node/BackwardsCompatNodeKt;
-Landroidx/compose/ui/node/CanFocusChecker;
-Landroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;
-Landroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;
-Landroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;
-Landroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;
-Landroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;
-Landroidx/compose/ui/node/ComposeUiNode$Companion;
-Landroidx/compose/ui/node/ComposeUiNode;
-Landroidx/compose/ui/node/DelegatableNode;
-Landroidx/compose/ui/node/DelegatableNodeKt;
-Landroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;
-Landroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2;
-Landroidx/compose/ui/node/DepthSortedSet;
-Landroidx/compose/ui/node/DrawModifierNode;
-Landroidx/compose/ui/node/DrawModifierNodeKt;
-Landroidx/compose/ui/node/GlobalPositionAwareModifierNode;
-Landroidx/compose/ui/node/HitTestResult;
-Landroidx/compose/ui/node/InnerNodeCoordinator$tail$1;
-Landroidx/compose/ui/node/InnerNodeCoordinator;
-Landroidx/compose/ui/node/IntStack;
-Landroidx/compose/ui/node/IntermediateLayoutModifierNode;
-Landroidx/compose/ui/node/IntrinsicsPolicy;
-Landroidx/compose/ui/node/LayerPositionalProperties;
-Landroidx/compose/ui/node/LayoutAwareModifierNode;
-Landroidx/compose/ui/node/LayoutModifierNode;
-Landroidx/compose/ui/node/LayoutModifierNodeCoordinator;
-Landroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;
-Landroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;
-Landroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;
-Landroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;
-Landroidx/compose/ui/node/LayoutNode$LayoutState$EnumUnboxingLocalUtility;
-Landroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;
-Landroidx/compose/ui/node/LayoutNode$UsageByParent$EnumUnboxingLocalUtility;
-Landroidx/compose/ui/node/LayoutNode$WhenMappings;
-Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;
-Landroidx/compose/ui/node/LayoutNode;
-Landroidx/compose/ui/node/LayoutNodeAlignmentLines;
-Landroidx/compose/ui/node/LayoutNodeDrawScope;
-Landroidx/compose/ui/node/LayoutNodeKt;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegateKt;
-Landroidx/compose/ui/node/LookaheadCapablePlaceable;
-Landroidx/compose/ui/node/LookaheadDelegate;
-Landroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;
-Landroidx/compose/ui/node/MeasureAndLayoutDelegate;
-Landroidx/compose/ui/node/ModifierNodeElement;
-Landroidx/compose/ui/node/MutableVectorWithMutationTracking;
-Landroidx/compose/ui/node/NodeChain$Differ;
-Landroidx/compose/ui/node/NodeChain;
-Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1;
-Landroidx/compose/ui/node/NodeChainKt$fillVector$1;
-Landroidx/compose/ui/node/NodeChainKt;
-Landroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;
-Landroidx/compose/ui/node/NodeCoordinator$Companion$SemanticsSource$1;
-Landroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;
-Landroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;
-Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
-Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;
-Landroidx/compose/ui/node/NodeCoordinator$invoke$1;
-Landroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;
-Landroidx/compose/ui/node/NodeCoordinator;
-Landroidx/compose/ui/node/NodeKind;
-Landroidx/compose/ui/node/NodeKindKt;
-Landroidx/compose/ui/node/NodeMeasuringIntrinsics$DefaultIntrinsicMeasurable;
-Landroidx/compose/ui/node/NodeMeasuringIntrinsics$EmptyPlaceable;
-Landroidx/compose/ui/node/ObserverNode$Companion$OnObserveReadsChanged$1;
-Landroidx/compose/ui/node/ObserverNode$Companion;
-Landroidx/compose/ui/node/ObserverNode;
-Landroidx/compose/ui/node/ObserverNodeKt;
-Landroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;
-Landroidx/compose/ui/node/OnPositionedDispatcher;
-Landroidx/compose/ui/node/OwnedLayer;
-Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener;
-Landroidx/compose/ui/node/Owner;
-Landroidx/compose/ui/node/OwnerScope;
-Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;
-Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;
-Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;
-Landroidx/compose/ui/node/OwnerSnapshotObserver;
-Landroidx/compose/ui/node/ParentDataModifierNode;
-Landroidx/compose/ui/node/PointerInputModifierNode;
-Landroidx/compose/ui/node/Ref;
-Landroidx/compose/ui/node/RootForTest;
-Landroidx/compose/ui/node/SemanticsModifierNode;
-Landroidx/compose/ui/node/SemanticsModifierNodeKt;
-Landroidx/compose/ui/node/Snake;
-Landroidx/compose/ui/node/TreeSet;
-Landroidx/compose/ui/node/UiApplier;
-Landroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;
-Landroidx/compose/ui/platform/AbstractComposeView;
-Landroidx/compose/ui/platform/AccessibilityManager;
-Landroidx/compose/ui/platform/AndroidAccessibilityManager;
-Landroidx/compose/ui/platform/AndroidClipboardManager;
-Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda0;
-Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;
-Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;
-Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;
-Landroidx/compose/ui/platform/AndroidComposeView$Companion;
-Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
-Landroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1;
-Landroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;
-Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;
-Landroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1;
-Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;
-Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;
-Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;
-Landroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;
-Landroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;
-Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;
-Landroidx/compose/ui/platform/AndroidComposeView;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;
-Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ$$ExternalSyntheticApiModelOutline0;
-Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;
-Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$1$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;
-Landroidx/compose/ui/platform/AndroidFontResourceLoader;
-Landroidx/compose/ui/platform/AndroidTextToolbar;
-Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;
-Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;
-Landroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;
-Landroidx/compose/ui/platform/AndroidUiDispatcher;
-Landroidx/compose/ui/platform/AndroidUiDispatcher_androidKt;
-Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$1;
-Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;
-Landroidx/compose/ui/platform/AndroidUiFrameClock;
-Landroidx/compose/ui/platform/AndroidUriHandler;
-Landroidx/compose/ui/platform/AndroidViewConfiguration;
-Landroidx/compose/ui/platform/CalculateMatrixToWindow;
-Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29;
-Landroidx/compose/ui/platform/ClipboardManager;
-Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;
-Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;
-Landroidx/compose/ui/platform/ComposeView$Content$1;
-Landroidx/compose/ui/platform/ComposeView;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt;
-Landroidx/compose/ui/platform/DeviceRenderNode;
-Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;
-Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;
-Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;
-Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;
-Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;
-Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;
-Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;
-Landroidx/compose/ui/platform/GlobalSnapshotManager;
-Landroidx/compose/ui/platform/InspectableModifier$End;
-Landroidx/compose/ui/platform/InspectableModifier;
-Landroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;
-Landroidx/compose/ui/platform/InspectableValueKt;
-Landroidx/compose/ui/platform/InspectorValueInfo;
-Landroidx/compose/ui/platform/LayerMatrixCache;
-Landroidx/compose/ui/platform/MotionDurationScaleImpl;
-Landroidx/compose/ui/platform/OutlineResolver;
-Landroidx/compose/ui/platform/RenderNodeApi29$$ExternalSyntheticApiModelOutline0;
-Landroidx/compose/ui/platform/RenderNodeApi29;
-Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper$$ExternalSyntheticApiModelOutline0;
-Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;
-Landroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;
-Landroidx/compose/ui/platform/RenderNodeLayer;
-Landroidx/compose/ui/platform/TextToolbar;
-Landroidx/compose/ui/platform/UriHandler;
-Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;
-Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;
-Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;
-Landroidx/compose/ui/platform/ViewConfiguration;
-Landroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;
-Landroidx/compose/ui/platform/ViewLayer;
-Landroidx/compose/ui/platform/WeakCache;
-Landroidx/compose/ui/platform/WindowInfo;
-Landroidx/compose/ui/platform/WindowInfoImpl;
-Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;
-Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion;
-Landroidx/compose/ui/platform/WindowRecomposerFactory;
-Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;
-Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;
-Landroidx/compose/ui/platform/WindowRecomposerPolicy;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt;
-Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;
-Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;
-Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$3;
-Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1;
-Landroidx/compose/ui/platform/WrappedComposition$setContent$1;
-Landroidx/compose/ui/platform/WrappedComposition;
-Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;
-Landroidx/compose/ui/platform/WrapperVerificationHelperMethods$$ExternalSyntheticApiModelOutline0;
-Landroidx/compose/ui/platform/WrapperVerificationHelperMethods;
-Landroidx/compose/ui/platform/Wrapper_androidKt;
-Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;
-Landroidx/compose/ui/res/ImageVectorCache$Key;
-Landroidx/compose/ui/res/ImageVectorCache;
-Landroidx/compose/ui/res/PainterResources_androidKt;
-Landroidx/compose/ui/semantics/AccessibilityAction;
-Landroidx/compose/ui/semantics/CollectionInfo;
-Landroidx/compose/ui/semantics/Role;
-Landroidx/compose/ui/semantics/ScrollAxisRange;
-Landroidx/compose/ui/semantics/SemanticsActions;
-Landroidx/compose/ui/semantics/SemanticsConfiguration;
-Landroidx/compose/ui/semantics/SemanticsConfigurationKt;
-Landroidx/compose/ui/semantics/SemanticsModifier;
-Landroidx/compose/ui/semantics/SemanticsModifierCore;
-Landroidx/compose/ui/semantics/SemanticsModifierKt;
-Landroidx/compose/ui/semantics/SemanticsNode;
-Landroidx/compose/ui/semantics/SemanticsNodeKt;
-Landroidx/compose/ui/semantics/SemanticsOwner;
-Landroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1;
-Landroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1;
-Landroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1;
-Landroidx/compose/ui/semantics/SemanticsProperties$Role$1;
-Landroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;
-Landroidx/compose/ui/semantics/SemanticsProperties$Text$1;
-Landroidx/compose/ui/semantics/SemanticsProperties;
-Landroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;
-Landroidx/compose/ui/semantics/SemanticsPropertiesKt;
-Landroidx/compose/ui/semantics/SemanticsPropertyKey$1;
-Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;
-Landroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;
-Landroidx/compose/ui/text/AndroidParagraph;
-Landroidx/compose/ui/text/AnnotatedString$Range;
-Landroidx/compose/ui/text/AnnotatedString;
-Landroidx/compose/ui/text/AnnotatedStringKt;
-Landroidx/compose/ui/text/MultiParagraph;
-Landroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;
-Landroidx/compose/ui/text/MultiParagraphIntrinsics$minIntrinsicWidth$2;
-Landroidx/compose/ui/text/MultiParagraphIntrinsics;
-Landroidx/compose/ui/text/Paragraph;
-Landroidx/compose/ui/text/ParagraphInfo;
-Landroidx/compose/ui/text/ParagraphIntrinsicInfo;
-Landroidx/compose/ui/text/ParagraphIntrinsics;
-Landroidx/compose/ui/text/ParagraphStyle;
-Landroidx/compose/ui/text/ParagraphStyleKt;
-Landroidx/compose/ui/text/Placeholder;
-Landroidx/compose/ui/text/SpanStyle;
-Landroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;
-Landroidx/compose/ui/text/SpanStyleKt;
-Landroidx/compose/ui/text/TextLayoutInput;
-Landroidx/compose/ui/text/TextLayoutResult;
-Landroidx/compose/ui/text/TextRange;
-Landroidx/compose/ui/text/TextRangeKt;
-Landroidx/compose/ui/text/TextStyle;
-Landroidx/compose/ui/text/android/BoringLayoutFactory;
-Landroidx/compose/ui/text/android/BoringLayoutFactoryDefault;
-Landroidx/compose/ui/text/android/LayoutCompat;
-Landroidx/compose/ui/text/android/LayoutIntrinsics$boringMetrics$2;
-Landroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2;
-Landroidx/compose/ui/text/android/LayoutIntrinsics$minIntrinsicWidth$2;
-Landroidx/compose/ui/text/android/LayoutIntrinsics;
-Landroidx/compose/ui/text/android/StaticLayoutFactory23;
-Landroidx/compose/ui/text/android/StaticLayoutFactory26;
-Landroidx/compose/ui/text/android/StaticLayoutFactory28;
-Landroidx/compose/ui/text/android/StaticLayoutFactory;
-Landroidx/compose/ui/text/android/StaticLayoutFactoryImpl;
-Landroidx/compose/ui/text/android/StaticLayoutParams;
-Landroidx/compose/ui/text/android/TextAlignmentAdapter;
-Landroidx/compose/ui/text/android/TextAndroidCanvas;
-Landroidx/compose/ui/text/android/TextLayout$layoutHelper$2;
-Landroidx/compose/ui/text/android/TextLayout;
-Landroidx/compose/ui/text/android/TextLayoutKt;
-Landroidx/compose/ui/text/android/style/BaselineShiftSpan;
-Landroidx/compose/ui/text/android/style/FontFeatureSpan;
-Landroidx/compose/ui/text/android/style/IndentationFixSpan;
-Landroidx/compose/ui/text/android/style/IndentationFixSpanKt;
-Landroidx/compose/ui/text/android/style/LetterSpacingSpanEm;
-Landroidx/compose/ui/text/android/style/LetterSpacingSpanPx;
-Landroidx/compose/ui/text/android/style/LineHeightSpan;
-Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;
-Landroidx/compose/ui/text/android/style/PlaceholderSpan;
-Landroidx/compose/ui/text/android/style/ShadowSpan;
-Landroidx/compose/ui/text/android/style/SkewXSpan;
-Landroidx/compose/ui/text/android/style/TextDecorationSpan;
-Landroidx/compose/ui/text/caches/ContainerHelpersKt;
-Landroidx/compose/ui/text/caches/LruCache;
-Landroidx/compose/ui/text/caches/SimpleArrayMap;
-Landroidx/compose/ui/text/font/AndroidFontLoader;
-Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;
-Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor_androidKt;
-Landroidx/compose/ui/text/font/AsyncTypefaceCache;
-Landroidx/compose/ui/text/font/DefaultFontFamily;
-Landroidx/compose/ui/text/font/FileBasedFontFamily;
-Landroidx/compose/ui/text/font/Font$ResourceLoader;
-Landroidx/compose/ui/text/font/FontFamily$Resolver;
-Landroidx/compose/ui/text/font/FontFamily;
-Landroidx/compose/ui/text/font/FontFamilyResolverImpl$createDefaultTypeface$1;
-Landroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;
-Landroidx/compose/ui/text/font/FontFamilyResolverImpl;
-Landroidx/compose/ui/text/font/FontFamilyResolverKt;
-Landroidx/compose/ui/text/font/FontListFontFamily;
-Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;
-Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;
-Landroidx/compose/ui/text/font/FontStyle;
-Landroidx/compose/ui/text/font/FontSynthesis;
-Landroidx/compose/ui/text/font/FontWeight;
-Landroidx/compose/ui/text/font/GenericFontFamily;
-Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;
-Landroidx/compose/ui/text/font/PlatformFontLoader;
-Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;
-Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;
-Landroidx/compose/ui/text/font/PlatformResolveInterceptor;
-Landroidx/compose/ui/text/font/PlatformTypefacesApi28;
-Landroidx/compose/ui/text/font/SystemFontFamily;
-Landroidx/compose/ui/text/font/TypefaceRequest;
-Landroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1;
-Landroidx/compose/ui/text/font/TypefaceRequestCache;
-Landroidx/compose/ui/text/font/TypefaceResult$Immutable;
-Landroidx/compose/ui/text/font/TypefaceResult;
-Landroidx/compose/ui/text/input/ImmHelper30;
-Landroidx/compose/ui/text/input/ImmHelper;
-Landroidx/compose/ui/text/input/InputMethodManager;
-Landroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;
-Landroidx/compose/ui/text/input/InputMethodManagerImpl;
-Landroidx/compose/ui/text/input/PlatformTextInputService;
-Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;
-Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;
-Landroidx/compose/ui/text/input/TextFieldValue;
-Landroidx/compose/ui/text/input/TextInputService;
-Landroidx/compose/ui/text/input/TextInputServiceAndroid$baseInputConnection$2;
-Landroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;
-Landroidx/compose/ui/text/input/TextInputServiceAndroid;
-Landroidx/compose/ui/text/intl/AndroidLocale;
-Landroidx/compose/ui/text/intl/Locale;
-Landroidx/compose/ui/text/intl/LocaleList$Companion;
-Landroidx/compose/ui/text/intl/LocaleList;
-Landroidx/compose/ui/text/intl/PlatformLocale;
-Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;
-Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;
-Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;
-Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;
-Landroidx/compose/ui/text/platform/AndroidTextPaint;
-Landroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;
-Landroidx/compose/ui/text/platform/DefaultImpl;
-Landroidx/compose/ui/text/platform/EmojiCompatStatus;
-Landroidx/compose/ui/text/platform/EmojiCompatStatusKt;
-Landroidx/compose/ui/text/platform/ImmutableBool;
-Landroidx/compose/ui/text/platform/TypefaceDirtyTracker;
-Landroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods;
-Landroidx/compose/ui/text/platform/extensions/PlaceholderExtensions_androidKt;
-Landroidx/compose/ui/text/platform/extensions/SpanRange;
-Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;
-Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;
-Landroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;
-Landroidx/compose/ui/text/platform/style/DrawStyleSpan;
-Landroidx/compose/ui/text/platform/style/ShaderBrushSpan;
-Landroidx/compose/ui/text/style/BaselineShift;
-Landroidx/compose/ui/text/style/BrushStyle;
-Landroidx/compose/ui/text/style/ColorStyle;
-Landroidx/compose/ui/text/style/Hyphens;
-Landroidx/compose/ui/text/style/LineBreak$Strategy;
-Landroidx/compose/ui/text/style/LineBreak$Strictness;
-Landroidx/compose/ui/text/style/LineBreak$WordBreak;
-Landroidx/compose/ui/text/style/LineBreak;
-Landroidx/compose/ui/text/style/TextAlign;
-Landroidx/compose/ui/text/style/TextDecoration;
-Landroidx/compose/ui/text/style/TextDirection;
-Landroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;
-Landroidx/compose/ui/text/style/TextForegroundStyle$merge$2;
-Landroidx/compose/ui/text/style/TextForegroundStyle;
-Landroidx/compose/ui/text/style/TextGeometricTransform;
-Landroidx/compose/ui/text/style/TextIndent;
-Landroidx/compose/ui/text/style/TextMotion;
-Landroidx/compose/ui/unit/AndroidDensity_androidKt;
-Landroidx/compose/ui/unit/Constraints$Companion;
-Landroidx/compose/ui/unit/Constraints;
-Landroidx/compose/ui/unit/ConstraintsKt;
-Landroidx/compose/ui/unit/Density;
-Landroidx/compose/ui/unit/DensityImpl;
-Landroidx/compose/ui/unit/Dp;
-Landroidx/compose/ui/unit/DpKt;
-Landroidx/compose/ui/unit/DpOffset;
-Landroidx/compose/ui/unit/DpRect;
-Landroidx/compose/ui/unit/IntOffset$Companion;
-Landroidx/compose/ui/unit/IntOffset;
-Landroidx/compose/ui/unit/IntOffsetKt;
-Landroidx/compose/ui/unit/IntSize$Companion;
-Landroidx/compose/ui/unit/IntSize;
-Landroidx/compose/ui/unit/IntSizeKt;
-Landroidx/compose/ui/unit/LayoutDirection;
-Landroidx/compose/ui/unit/TextUnit;
-Landroidx/compose/ui/unit/TextUnitKt;
-Landroidx/compose/ui/unit/TextUnitType;
-Landroidx/compose/ui/util/MathHelpersKt;
-Landroidx/core/R$id;
-Landroidx/core/app/ComponentActivity;
-Landroidx/core/app/CoreComponentFactory$CompatWrapped;
-Landroidx/core/app/CoreComponentFactory;
-Landroidx/core/content/res/CamUtils;
-Landroidx/core/content/res/ColorStateListInflaterCompat;
-Landroidx/core/content/res/TypedArrayUtils;
-Landroidx/core/graphics/TypefaceCompat;
-Landroidx/core/graphics/TypefaceCompatApi29Impl;
-Landroidx/core/graphics/TypefaceCompatBaseImpl;
-Landroidx/core/graphics/TypefaceCompatUtil$Api19Impl;
-Landroidx/core/graphics/TypefaceCompatUtil;
-Landroidx/core/math/MathUtils;
-Landroidx/core/os/BuildCompat;
-Landroidx/core/os/TraceCompat$Api18Impl;
-Landroidx/core/os/TraceCompat;
-Landroidx/core/provider/FontProvider$$ExternalSyntheticLambda0;
-Landroidx/core/provider/FontProvider$Api16Impl;
-Landroidx/core/provider/FontProvider;
-Landroidx/core/provider/FontRequest;
-Landroidx/core/provider/FontsContractCompat$FontFamilyResult;
-Landroidx/core/provider/FontsContractCompat$FontInfo;
-Landroidx/core/text/TextUtilsCompat$Api17Impl;
-Landroidx/core/text/TextUtilsCompat;
-Landroidx/core/util/Preconditions;
-Landroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;
-Landroidx/core/view/AccessibilityDelegateCompat;
-Landroidx/core/view/MenuHostHelper;
-Landroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;
-Landroidx/core/view/ViewCompat;
-Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;
-Landroidx/customview/poolingcontainer/PoolingContainer;
-Landroidx/customview/poolingcontainer/PoolingContainerListener;
-Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
-Landroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;
-Landroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;
-Landroidx/emoji2/text/DefaultEmojiCompatConfig;
-Landroidx/emoji2/text/DefaultGlyphChecker;
-Landroidx/emoji2/text/EmojiCompat$CompatInternal19$1;
-Landroidx/emoji2/text/EmojiCompat$CompatInternal19;
-Landroidx/emoji2/text/EmojiCompat$CompatInternal;
-Landroidx/emoji2/text/EmojiCompat$Config;
-Landroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;
-Landroidx/emoji2/text/EmojiCompat$GlyphChecker;
-Landroidx/emoji2/text/EmojiCompat$InitCallback;
-Landroidx/emoji2/text/EmojiCompat$ListenerDispatcher;
-Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;
-Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;
-Landroidx/emoji2/text/EmojiCompat$SpanFactory;
-Landroidx/emoji2/text/EmojiCompat;
-Landroidx/emoji2/text/EmojiCompatInitializer$1;
-Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig;
-Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;
-Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;
-Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;
-Landroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;
-Landroidx/emoji2/text/EmojiCompatInitializer;
-Landroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Reflections;
-Landroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;
-Landroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;
-Landroidx/emoji2/text/EmojiProcessor$ProcessorSm;
-Landroidx/emoji2/text/EmojiProcessor;
-Landroidx/emoji2/text/EmojiSpan;
-Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;
-Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;
-Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;
-Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
-Landroidx/emoji2/text/MetadataListReader$ByteBufferReader;
-Landroidx/emoji2/text/MetadataListReader;
-Landroidx/emoji2/text/MetadataRepo$Node;
-Landroidx/emoji2/text/MetadataRepo;
-Landroidx/emoji2/text/SpannableBuilder;
-Landroidx/emoji2/text/TypefaceEmojiRasterizer;
-Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;
-Landroidx/emoji2/text/flatbuffer/MetadataItem;
-Landroidx/emoji2/text/flatbuffer/MetadataList;
-Landroidx/emoji2/text/flatbuffer/Table;
-Landroidx/emoji2/text/flatbuffer/Utf8Safe;
-Landroidx/lifecycle/DefaultLifecycleObserver;
-Landroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;
-Landroidx/lifecycle/DefaultLifecycleObserverAdapter;
-Landroidx/lifecycle/EmptyActivityLifecycleCallbacks;
-Landroidx/lifecycle/HasDefaultViewModelProviderFactory;
-Landroidx/lifecycle/Lifecycle$Event$Companion;
-Landroidx/lifecycle/Lifecycle$Event$WhenMappings;
-Landroidx/lifecycle/Lifecycle$Event;
-Landroidx/lifecycle/Lifecycle$State;
-Landroidx/lifecycle/Lifecycle;
-Landroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;
-Landroidx/lifecycle/LifecycleDispatcher;
-Landroidx/lifecycle/LifecycleEventObserver;
-Landroidx/lifecycle/LifecycleObserver;
-Landroidx/lifecycle/LifecycleOwner;
-Landroidx/lifecycle/LifecycleRegistry$ObserverWithState;
-Landroidx/lifecycle/LifecycleRegistry;
-Landroidx/lifecycle/LifecycleRegistryOwner;
-Landroidx/lifecycle/Lifecycling;
-Landroidx/lifecycle/ProcessLifecycleInitializer;
-Landroidx/lifecycle/ProcessLifecycleOwner$1;
-Landroidx/lifecycle/ProcessLifecycleOwner$2;
-Landroidx/lifecycle/ProcessLifecycleOwner$3$$ExternalSyntheticApiModelOutline0;
-Landroidx/lifecycle/ProcessLifecycleOwner$3$1;
-Landroidx/lifecycle/ProcessLifecycleOwner$3;
-Landroidx/lifecycle/ProcessLifecycleOwner;
-Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
-Landroidx/lifecycle/ReportFragment$LifecycleCallbacks$$ExternalSyntheticApiModelOutline0;
-Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;
-Landroidx/lifecycle/ReportFragment;
-Landroidx/lifecycle/SavedStateHandleAttacher;
-Landroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;
-Landroidx/lifecycle/SavedStateHandleSupport$SAVED_STATE_REGISTRY_OWNER_KEY$1;
-Landroidx/lifecycle/SavedStateHandleSupport$VIEW_MODEL_STORE_OWNER_KEY$1;
-Landroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;
-Landroidx/lifecycle/SavedStateHandleSupport;
-Landroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;
-Landroidx/lifecycle/SavedStateHandlesProvider;
-Landroidx/lifecycle/SavedStateHandlesVM;
-Landroidx/lifecycle/ViewModel;
-Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;
-Landroidx/lifecycle/ViewModelProvider$Factory;
-Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl;
-Landroidx/lifecycle/ViewModelStore;
-Landroidx/lifecycle/ViewModelStoreOwner;
-Landroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1;
-Landroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2;
-Landroidx/lifecycle/ViewTreeLifecycleOwner;
-Landroidx/lifecycle/runtime/R$id;
-Landroidx/lifecycle/viewmodel/CreationExtras$Empty;
-Landroidx/lifecycle/viewmodel/CreationExtras;
-Landroidx/lifecycle/viewmodel/InitializerViewModelFactory;
-Landroidx/lifecycle/viewmodel/MutableCreationExtras;
-Landroidx/lifecycle/viewmodel/ViewModelInitializer;
-Landroidx/metrics/performance/DelegatingFrameMetricsListener;
-Landroidx/metrics/performance/FrameData;
-Landroidx/metrics/performance/FrameDataApi24;
-Landroidx/metrics/performance/FrameDataApi31;
-Landroidx/metrics/performance/JankStats$OnFrameListener;
-Landroidx/metrics/performance/JankStats;
-Landroidx/metrics/performance/JankStatsApi16Impl$onFrameListenerDelegate$1;
-Landroidx/metrics/performance/JankStatsApi16Impl;
-Landroidx/metrics/performance/JankStatsApi22Impl;
-Landroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;
-Landroidx/metrics/performance/JankStatsApi24Impl;
-Landroidx/metrics/performance/JankStatsApi26Impl;
-Landroidx/metrics/performance/JankStatsApi31Impl;
-Landroidx/metrics/performance/JankStatsBaseImpl;
-Landroidx/metrics/performance/PerformanceMetricsState$Holder;
-Landroidx/metrics/performance/PerformanceMetricsState;
-Landroidx/metrics/performance/R$id;
-Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;
-Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;
-Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;
-Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;
-Landroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;
-Landroidx/profileinstaller/ProfileInstallerInitializer$Result;
-Landroidx/profileinstaller/ProfileInstallerInitializer;
-Landroidx/savedstate/Recreator;
-Landroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;
-Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;
-Landroidx/savedstate/SavedStateRegistry;
-Landroidx/savedstate/SavedStateRegistryController;
-Landroidx/savedstate/SavedStateRegistryOwner;
-Landroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;
-Landroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;
-Landroidx/startup/AppInitializer;
-Landroidx/startup/InitializationProvider;
-Landroidx/startup/Initializer;
-Landroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;
-Landroidx/tracing/Trace;
-Landroidx/tv/foundation/ContentInViewModifier$modifier$1;
-Landroidx/tv/foundation/ContentInViewModifier;
-Landroidx/tv/foundation/PivotOffsets;
-Landroidx/tv/foundation/ScrollableWithPivotKt$scrollableNestedScrollConnection$1;
-Landroidx/tv/foundation/ScrollableWithPivotKt$scrollableWithPivot$2;
-Landroidx/tv/foundation/ScrollableWithPivotKt;
-Landroidx/tv/foundation/ScrollingLogic;
-Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;
-Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;
-Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1;
-Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;
-Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;
-Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt;
-Landroidx/tv/foundation/lazy/list/AwaitFirstLayoutModifier$waitForFirstLayout$1;
-Landroidx/tv/foundation/lazy/list/AwaitFirstLayoutModifier;
-Landroidx/tv/foundation/lazy/list/DataIndex;
-Landroidx/tv/foundation/lazy/list/EmptyLazyListLayoutInfo;
-Landroidx/tv/foundation/lazy/list/ItemInfo;
-Landroidx/tv/foundation/lazy/list/LazyDslKt;
-Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsInfo$Interval;
-Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsInfo;
-Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;
-Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal$layout$2;
-Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal;
-Landroidx/tv/foundation/lazy/list/LazyListIntervalContent;
-Landroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator$getAnimatedOffset$1;
-Landroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator$onMeasured$$inlined$sortBy$1;
-Landroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator$onMeasured$$inlined$sortBy$2;
-Landroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator$onMeasured$$inlined$sortByDescending$1;
-Landroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator$onMeasured$$inlined$sortByDescending$2;
-Landroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator;
-Landroidx/tv/foundation/lazy/list/LazyListItemProvider;
-Landroidx/tv/foundation/lazy/list/LazyListItemProviderImpl$1$1;
-Landroidx/tv/foundation/lazy/list/LazyListItemProviderImpl$1;
-Landroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;
-Landroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;
-Landroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;
-Landroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;
-Landroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;
-Landroidx/tv/foundation/lazy/list/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;
-Landroidx/tv/foundation/lazy/list/LazyListKt$ScrollPositionUpdater$1;
-Landroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;
-Landroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;
-Landroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;
-Landroidx/tv/foundation/lazy/list/LazyListKt;
-Landroidx/tv/foundation/lazy/list/LazyListMeasureKt$measureLazyList$1;
-Landroidx/tv/foundation/lazy/list/LazyListMeasureKt$measureLazyList$5;
-Landroidx/tv/foundation/lazy/list/LazyListMeasureKt;
-Landroidx/tv/foundation/lazy/list/LazyListMeasureResult;
-Landroidx/tv/foundation/lazy/list/LazyListPinnableContainerProviderKt$LazyListPinnableContainerProvider$1$1$invoke$$inlined$onDispose$1;
-Landroidx/tv/foundation/lazy/list/LazyListPinnableContainerProviderKt$LazyListPinnableContainerProvider$1$1;
-Landroidx/tv/foundation/lazy/list/LazyListPinnableContainerProviderKt;
-Landroidx/tv/foundation/lazy/list/LazyListPinnableItem;
-Landroidx/tv/foundation/lazy/list/LazyListPinnedItem;
-Landroidx/tv/foundation/lazy/list/LazyListPlaceableWrapper;
-Landroidx/tv/foundation/lazy/list/LazyListPositionedItem;
-Landroidx/tv/foundation/lazy/list/LazyListScrollPosition;
-Landroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;
-Landroidx/tv/foundation/lazy/list/LazyListStateKt;
-Landroidx/tv/foundation/lazy/list/LazyMeasuredItem;
-Landroidx/tv/foundation/lazy/list/LazyMeasuredItemProvider;
-Landroidx/tv/foundation/lazy/list/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1;
-Landroidx/tv/foundation/lazy/list/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2;
-Landroidx/tv/foundation/lazy/list/LazySemanticsKt$rememberLazyListSemanticState$1$1;
-Landroidx/tv/foundation/lazy/list/MeasuredItemFactory;
-Landroidx/tv/foundation/lazy/list/PlaceableInfo;
-Landroidx/tv/foundation/lazy/list/TvLazyListItemInfo;
-Landroidx/tv/foundation/lazy/list/TvLazyListItemScope;
-Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;
-Landroidx/tv/foundation/lazy/list/TvLazyListLayoutInfo;
-Landroidx/tv/foundation/lazy/list/TvLazyListScope$items$1;
-Landroidx/tv/foundation/lazy/list/TvLazyListScope;
-Landroidx/tv/foundation/lazy/list/TvLazyListScopeImpl;
-Landroidx/tv/foundation/lazy/list/TvLazyListState$Companion$Saver$1;
-Landroidx/tv/foundation/lazy/list/TvLazyListState$Companion$Saver$2;
-Landroidx/tv/foundation/lazy/list/TvLazyListState$remeasurementModifier$1;
-Landroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;
-Landroidx/tv/foundation/lazy/list/TvLazyListState$scrollableState$1;
-Landroidx/tv/foundation/lazy/list/TvLazyListState;
-Landroidx/tv/material3/ColorScheme;
-Landroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;
-Landroidx/tv/material3/ColorSchemeKt;
-Landroidx/tv/material3/ContentColorKt$LocalContentColor$1;
-Landroidx/tv/material3/ContentColorKt;
-Landroidx/tv/material3/MaterialThemeKt$$ExternalSyntheticOutline0;
-Landroidx/tv/material3/MaterialThemeKt$MaterialTheme$1;
-Landroidx/tv/material3/MaterialThemeKt$MaterialTheme$2;
-Landroidx/tv/material3/MaterialThemeKt;
-Landroidx/tv/material3/ShapeDefaults;
-Landroidx/tv/material3/Shapes;
-Landroidx/tv/material3/ShapesKt$LocalShapes$1;
-Landroidx/tv/material3/ShapesKt;
-Landroidx/tv/material3/TabColors;
-Landroidx/tv/material3/TabKt$Tab$1;
-Landroidx/tv/material3/TabKt$Tab$3$1$1;
-Landroidx/tv/material3/TabKt$Tab$3$2$1;
-Landroidx/tv/material3/TabKt$Tab$3;
-Landroidx/tv/material3/TabKt$Tab$4;
-Landroidx/tv/material3/TabKt;
-Landroidx/tv/material3/TabRowDefaults$PillIndicator$1;
-Landroidx/tv/material3/TabRowDefaults;
-Landroidx/tv/material3/TabRowKt$LocalTabRowHasFocus$1;
-Landroidx/tv/material3/TabRowKt$TabRow$1;
-Landroidx/tv/material3/TabRowKt$TabRow$2$1$1;
-Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;
-Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;
-Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;
-Landroidx/tv/material3/TabRowKt$TabRow$2$2$1;
-Landroidx/tv/material3/TabRowKt$TabRow$2;
-Landroidx/tv/material3/TabRowKt$TabRow$3;
-Landroidx/tv/material3/TabRowKt;
-Landroidx/tv/material3/TabRowSlots;
-Landroidx/tv/material3/TextKt$LocalTextStyle$1;
-Landroidx/tv/material3/TextKt$Text$1;
-Landroidx/tv/material3/TextKt$Text$2;
-Landroidx/tv/material3/TextKt;
-Landroidx/tv/material3/Typography;
-Landroidx/tv/material3/TypographyKt$LocalTypography$1;
-Landroidx/tv/material3/TypographyKt;
-Landroidx/tv/material3/tokens/ColorDarkTokens;
-Landroidx/tv/material3/tokens/PaletteTokens;
-Landroidx/tv/material3/tokens/ShapeTokens;
-Landroidx/tv/material3/tokens/TypeScaleTokens;
-Landroidx/tv/material3/tokens/TypefaceTokens;
-Landroidx/tv/material3/tokens/TypographyTokens;
-Lcoil/base/R$id;
-Lcoil/request/ViewTargetDisposable;
-Lcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt$lambda-1$1;
-Lcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt;
-Lcom/example/tvcomposebasedtests/JankStatsAggregator$OnJankReportListener;
-Lcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;
-Lcom/example/tvcomposebasedtests/JankStatsAggregator;
-Lcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;
-Lcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;
-Lcom/example/tvcomposebasedtests/MainActivity;
-Lcom/example/tvcomposebasedtests/UtilsKt;
-Lcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1$1$1$1;
-Lcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;
-Lcom/example/tvcomposebasedtests/tvComponents/AppKt;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-1$1;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-2$1;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-3$1;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-4$1;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-1$1;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-2$1;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-3$1;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-4$1;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-5$1;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-6$1;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-7$1;
-Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt;
-Lcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$SampleCardItem$2;
-Lcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$SampleTvLazyRow$1$1;
-Lcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$drawBorderAndScaleOnFocus$1$1;
-Lcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt;
-Lcom/example/tvcomposebasedtests/tvComponents/Navigation;
-Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;
-Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$2;
-Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;
-Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$2$1;
-Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;
-Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$4;
-Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt;
-Lcom/google/gson/internal/ObjectConstructor;
-Lkotlin/ExceptionsKt;
-Lkotlin/Function;
-Lkotlin/Lazy;
-Lkotlin/LazyKt__LazyJVMKt;
-Lkotlin/NoWhenBranchMatchedException;
-Lkotlin/Pair;
-Lkotlin/Result$Failure;
-Lkotlin/Result;
-Lkotlin/ResultKt;
-Lkotlin/SynchronizedLazyImpl;
-Lkotlin/UNINITIALIZED_VALUE;
-Lkotlin/Unit;
-Lkotlin/UnsafeLazyImpl;
-Lkotlin/UnsignedKt;
-Lkotlin/collections/AbstractCollection;
-Lkotlin/collections/AbstractList;
-Lkotlin/collections/AbstractMap;
-Lkotlin/collections/AbstractMutableList;
-Lkotlin/collections/AbstractMutableMap;
-Lkotlin/collections/AbstractSet;
-Lkotlin/collections/ArrayDeque;
-Lkotlin/collections/ArraysKt__ArraysKt;
-Lkotlin/collections/ArraysKt___ArraysKt;
-Lkotlin/collections/CollectionsKt__CollectionsKt;
-Lkotlin/collections/CollectionsKt__IteratorsJVMKt;
-Lkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;
-Lkotlin/collections/CollectionsKt__ReversedViewsKt;
-Lkotlin/collections/CollectionsKt___CollectionsKt;
-Lkotlin/collections/EmptyList;
-Lkotlin/collections/EmptyMap;
-Lkotlin/collections/IntIterator;
-Lkotlin/collections/MapsKt___MapsJvmKt;
-Lkotlin/collections/SetsKt__SetsKt;
-Lkotlin/coroutines/AbstractCoroutineContextElement;
-Lkotlin/coroutines/AbstractCoroutineContextKey;
-Lkotlin/coroutines/CombinedContext;
-Lkotlin/coroutines/Continuation;
-Lkotlin/coroutines/ContinuationInterceptor$Key;
-Lkotlin/coroutines/ContinuationInterceptor;
-Lkotlin/coroutines/ContinuationKt;
-Lkotlin/coroutines/CoroutineContext$DefaultImpls;
-Lkotlin/coroutines/CoroutineContext$Element$DefaultImpls;
-Lkotlin/coroutines/CoroutineContext$Element;
-Lkotlin/coroutines/CoroutineContext$Key;
-Lkotlin/coroutines/CoroutineContext$plus$1;
-Lkotlin/coroutines/CoroutineContext;
-Lkotlin/coroutines/EmptyCoroutineContext;
-Lkotlin/coroutines/SafeContinuation;
-Lkotlin/coroutines/intrinsics/CoroutineSingletons;
-Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;
-Lkotlin/coroutines/jvm/internal/CompletedContinuation;
-Lkotlin/coroutines/jvm/internal/ContinuationImpl;
-Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
-Lkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;
-Lkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;
-Lkotlin/coroutines/jvm/internal/SuspendLambda;
-Lkotlin/internal/ProgressionUtilKt;
-Lkotlin/jvm/JvmClassMappingKt;
-Lkotlin/jvm/functions/Function0;
-Lkotlin/jvm/functions/Function10;
-Lkotlin/jvm/functions/Function11;
-Lkotlin/jvm/functions/Function12;
-Lkotlin/jvm/functions/Function13;
-Lkotlin/jvm/functions/Function14;
-Lkotlin/jvm/functions/Function15;
-Lkotlin/jvm/functions/Function16;
-Lkotlin/jvm/functions/Function17;
-Lkotlin/jvm/functions/Function18;
-Lkotlin/jvm/functions/Function19;
-Lkotlin/jvm/functions/Function1;
-Lkotlin/jvm/functions/Function20;
-Lkotlin/jvm/functions/Function21;
-Lkotlin/jvm/functions/Function22;
-Lkotlin/jvm/functions/Function2;
-Lkotlin/jvm/functions/Function3;
-Lkotlin/jvm/functions/Function4;
-Lkotlin/jvm/functions/Function5;
-Lkotlin/jvm/functions/Function6;
-Lkotlin/jvm/functions/Function7;
-Lkotlin/jvm/functions/Function8;
-Lkotlin/jvm/functions/Function9;
-Lkotlin/jvm/internal/CallableReference$NoReceiver;
-Lkotlin/jvm/internal/CallableReference;
-Lkotlin/jvm/internal/ClassBasedDeclarationContainer;
-Lkotlin/jvm/internal/ClassReference;
-Lkotlin/jvm/internal/CollectionToArray;
-Lkotlin/jvm/internal/FunctionBase;
-Lkotlin/jvm/internal/FunctionReference;
-Lkotlin/jvm/internal/FunctionReferenceImpl;
-Lkotlin/jvm/internal/Intrinsics$$ExternalSyntheticCheckNotZero0;
-Lkotlin/jvm/internal/Intrinsics$Kotlin;
-Lkotlin/jvm/internal/Intrinsics;
-Lkotlin/jvm/internal/Lambda;
-Lkotlin/jvm/internal/MutablePropertyReference1;
-Lkotlin/jvm/internal/MutablePropertyReference1Impl;
-Lkotlin/jvm/internal/MutablePropertyReference;
-Lkotlin/jvm/internal/PropertyReference;
-Lkotlin/jvm/internal/Ref$BooleanRef;
-Lkotlin/jvm/internal/Ref$FloatRef;
-Lkotlin/jvm/internal/Ref$ObjectRef;
-Lkotlin/jvm/internal/Reflection;
-Lkotlin/jvm/internal/ReflectionFactory;
-Lkotlin/jvm/internal/TypeIntrinsics;
-Lkotlin/jvm/internal/markers/KMappedMarker;
-Lkotlin/jvm/internal/markers/KMutableCollection;
-Lkotlin/jvm/internal/markers/KMutableMap;
-Lkotlin/math/MathKt;
-Lkotlin/math/MathKt__MathJVMKt;
-Lkotlin/ranges/ClosedRange;
-Lkotlin/ranges/IntProgression;
-Lkotlin/ranges/IntProgressionIterator;
-Lkotlin/ranges/IntRange;
-Lkotlin/ranges/RangesKt___RangesKt;
-Lkotlin/reflect/KCallable;
-Lkotlin/reflect/KClass;
-Lkotlin/reflect/KFunction;
-Lkotlin/reflect/KMutableProperty1;
-Lkotlin/reflect/KProperty1;
-Lkotlin/reflect/KProperty;
-Lkotlin/sequences/ConstrainedOnceSequence;
-Lkotlin/sequences/FilteringSequence$iterator$1;
-Lkotlin/sequences/FilteringSequence;
-Lkotlin/sequences/GeneratorSequence$iterator$1;
-Lkotlin/sequences/GeneratorSequence;
-Lkotlin/sequences/Sequence;
-Lkotlin/sequences/SequencesKt__SequencesJVMKt;
-Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;
-Lkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;
-Lkotlin/sequences/SequencesKt__SequencesKt;
-Lkotlin/sequences/SequencesKt___SequencesJvmKt;
-Lkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;
-Lkotlin/sequences/SequencesKt___SequencesKt;
-Lkotlin/sequences/TransformingSequence$iterator$1;
-Lkotlin/sequences/TransformingSequence;
-Lkotlin/text/CharsKt__CharKt;
-Lkotlin/text/StringsKt__AppendableKt;
-Lkotlin/text/StringsKt__IndentKt;
-Lkotlin/text/StringsKt__RegexExtensionsKt;
-Lkotlin/text/StringsKt__StringBuilderKt;
-Lkotlin/text/StringsKt__StringNumberConversionsKt;
-Lkotlin/text/StringsKt__StringsJVMKt;
-Lkotlin/text/StringsKt__StringsKt;
-Lkotlinx/coroutines/AbstractCoroutine;
-Lkotlinx/coroutines/Active;
-Lkotlinx/coroutines/BeforeResumeCancelHandler;
-Lkotlinx/coroutines/BlockingCoroutine;
-Lkotlinx/coroutines/BlockingEventLoop;
-Lkotlinx/coroutines/BuildersKt;
-Lkotlinx/coroutines/CancelHandler;
-Lkotlinx/coroutines/CancelHandlerBase;
-Lkotlinx/coroutines/CancellableContinuation;
-Lkotlinx/coroutines/CancellableContinuationImpl;
-Lkotlinx/coroutines/CancellableContinuationImplKt;
-Lkotlinx/coroutines/CancellableContinuationKt;
-Lkotlinx/coroutines/CancelledContinuation;
-Lkotlinx/coroutines/ChildContinuation;
-Lkotlinx/coroutines/ChildHandle;
-Lkotlinx/coroutines/ChildHandleNode;
-Lkotlinx/coroutines/ChildJob;
-Lkotlinx/coroutines/CompletableDeferredImpl;
-Lkotlinx/coroutines/CompletedContinuation;
-Lkotlinx/coroutines/CompletedExceptionally;
-Lkotlinx/coroutines/CompletedWithCancellation;
-Lkotlinx/coroutines/CompletionHandlerBase;
-Lkotlinx/coroutines/CompletionHandlerException;
-Lkotlinx/coroutines/CompletionStateKt;
-Lkotlinx/coroutines/CopyableThreadContextElement;
-Lkotlinx/coroutines/CoroutineContextKt$foldCopies$1;
-Lkotlinx/coroutines/CoroutineContextKt$foldCopies$folded$1;
-Lkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;
-Lkotlinx/coroutines/CoroutineContextKt;
-Lkotlinx/coroutines/CoroutineDispatcher$Key$1;
-Lkotlinx/coroutines/CoroutineDispatcher$Key;
-Lkotlinx/coroutines/CoroutineDispatcher;
-Lkotlinx/coroutines/CoroutineExceptionHandler$Key;
-Lkotlinx/coroutines/CoroutineExceptionHandler;
-Lkotlinx/coroutines/CoroutineScope;
-Lkotlinx/coroutines/CoroutineScopeKt;
-Lkotlinx/coroutines/DefaultExecutor;
-Lkotlinx/coroutines/DefaultExecutorKt;
-Lkotlinx/coroutines/Delay;
-Lkotlinx/coroutines/DispatchedTask;
-Lkotlinx/coroutines/DispatchedTaskKt;
-Lkotlinx/coroutines/Dispatchers;
-Lkotlinx/coroutines/DisposableHandle;
-Lkotlinx/coroutines/Empty;
-Lkotlinx/coroutines/EventLoop;
-Lkotlinx/coroutines/EventLoopImplBase;
-Lkotlinx/coroutines/EventLoopImplPlatform;
-Lkotlinx/coroutines/ExecutorCoroutineDispatcher;
-Lkotlinx/coroutines/GlobalScope;
-Lkotlinx/coroutines/InactiveNodeList;
-Lkotlinx/coroutines/Incomplete;
-Lkotlinx/coroutines/IncompleteStateBox;
-Lkotlinx/coroutines/InvokeOnCancel;
-Lkotlinx/coroutines/InvokeOnCancelling;
-Lkotlinx/coroutines/InvokeOnCompletion;
-Lkotlinx/coroutines/Job$DefaultImpls;
-Lkotlinx/coroutines/Job$Key;
-Lkotlinx/coroutines/Job;
-Lkotlinx/coroutines/JobCancellationException;
-Lkotlinx/coroutines/JobCancellingNode;
-Lkotlinx/coroutines/JobImpl;
-Lkotlinx/coroutines/JobKt;
-Lkotlinx/coroutines/JobNode;
-Lkotlinx/coroutines/JobSupport$ChildCompletion;
-Lkotlinx/coroutines/JobSupport$Finishing;
-Lkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;
-Lkotlinx/coroutines/JobSupport;
-Lkotlinx/coroutines/JobSupportKt;
-Lkotlinx/coroutines/MainCoroutineDispatcher;
-Lkotlinx/coroutines/NodeList;
-Lkotlinx/coroutines/NonDisposableHandle;
-Lkotlinx/coroutines/NotCompleted;
-Lkotlinx/coroutines/ParentJob;
-Lkotlinx/coroutines/RemoveOnCancel;
-Lkotlinx/coroutines/StandaloneCoroutine;
-Lkotlinx/coroutines/SupervisorJobImpl;
-Lkotlinx/coroutines/ThreadContextElement;
-Lkotlinx/coroutines/ThreadLocalEventLoop;
-Lkotlinx/coroutines/TimeoutCancellationException;
-Lkotlinx/coroutines/Unconfined;
-Lkotlinx/coroutines/UndispatchedCoroutine;
-Lkotlinx/coroutines/UndispatchedMarker;
-Lkotlinx/coroutines/android/AndroidDispatcherFactory;
-Lkotlinx/coroutines/android/HandlerContext;
-Lkotlinx/coroutines/android/HandlerDispatcher;
-Lkotlinx/coroutines/android/HandlerDispatcherKt;
-Lkotlinx/coroutines/channels/AbstractChannel$Itr;
-Lkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;
-Lkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;
-Lkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel;
-Lkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;
-Lkotlinx/coroutines/channels/AbstractChannel$receiveCatching$1;
-Lkotlinx/coroutines/channels/AbstractChannel;
-Lkotlinx/coroutines/channels/AbstractChannelKt;
-Lkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;
-Lkotlinx/coroutines/channels/AbstractSendChannel;
-Lkotlinx/coroutines/channels/ArrayChannel;
-Lkotlinx/coroutines/channels/BufferOverflow;
-Lkotlinx/coroutines/channels/Channel$Factory;
-Lkotlinx/coroutines/channels/Channel;
-Lkotlinx/coroutines/channels/ChannelCoroutine;
-Lkotlinx/coroutines/channels/ChannelIterator;
-Lkotlinx/coroutines/channels/ChannelKt;
-Lkotlinx/coroutines/channels/ChannelResult$Closed;
-Lkotlinx/coroutines/channels/ChannelResult$Failed;
-Lkotlinx/coroutines/channels/ChannelResult;
-Lkotlinx/coroutines/channels/Closed;
-Lkotlinx/coroutines/channels/ClosedSendChannelException;
-Lkotlinx/coroutines/channels/ConflatedChannel;
-Lkotlinx/coroutines/channels/LinkedListChannel;
-Lkotlinx/coroutines/channels/ProducerCoroutine;
-Lkotlinx/coroutines/channels/ProducerScope;
-Lkotlinx/coroutines/channels/Receive;
-Lkotlinx/coroutines/channels/ReceiveChannel;
-Lkotlinx/coroutines/channels/ReceiveOrClosed;
-Lkotlinx/coroutines/channels/RendezvousChannel;
-Lkotlinx/coroutines/channels/Send;
-Lkotlinx/coroutines/channels/SendChannel;
-Lkotlinx/coroutines/flow/AbstractFlow$collect$1;
-Lkotlinx/coroutines/flow/AbstractFlow;
-Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;
-Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;
-Lkotlinx/coroutines/flow/DistinctFlowImpl;
-Lkotlinx/coroutines/flow/Flow;
-Lkotlinx/coroutines/flow/FlowCollector;
-Lkotlinx/coroutines/flow/FlowKt;
-Lkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;
-Lkotlinx/coroutines/flow/FlowKt__ChannelsKt;
-Lkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;
-Lkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;
-Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;
-Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;
-Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;
-Lkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;
-Lkotlinx/coroutines/flow/FlowKt__MergeKt;
-Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;
-Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;
-Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;
-Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;
-Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;
-Lkotlinx/coroutines/flow/MutableSharedFlow;
-Lkotlinx/coroutines/flow/MutableStateFlow;
-Lkotlinx/coroutines/flow/ReadonlyStateFlow;
-Lkotlinx/coroutines/flow/SafeFlow;
-Lkotlinx/coroutines/flow/SharedFlow;
-Lkotlinx/coroutines/flow/SharedFlowImpl$Emitter;
-Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;
-Lkotlinx/coroutines/flow/SharedFlowImpl;
-Lkotlinx/coroutines/flow/SharedFlowKt;
-Lkotlinx/coroutines/flow/SharedFlowSlot;
-Lkotlinx/coroutines/flow/SharingCommand;
-Lkotlinx/coroutines/flow/SharingConfig;
-Lkotlinx/coroutines/flow/SharingStarted$Companion;
-Lkotlinx/coroutines/flow/SharingStarted;
-Lkotlinx/coroutines/flow/StartedEagerly;
-Lkotlinx/coroutines/flow/StartedLazily;
-Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;
-Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;
-Lkotlinx/coroutines/flow/StartedWhileSubscribed;
-Lkotlinx/coroutines/flow/StateFlow;
-Lkotlinx/coroutines/flow/StateFlowImpl$collect$1;
-Lkotlinx/coroutines/flow/StateFlowImpl;
-Lkotlinx/coroutines/flow/StateFlowKt;
-Lkotlinx/coroutines/flow/StateFlowSlot;
-Lkotlinx/coroutines/flow/SubscribedFlowCollector;
-Lkotlinx/coroutines/flow/ThrowingCollector;
-Lkotlinx/coroutines/flow/internal/AbortFlowException;
-Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;
-Lkotlinx/coroutines/flow/internal/AbstractSharedFlowKt;
-Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-Lkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;
-Lkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;
-Lkotlinx/coroutines/flow/internal/ChannelFlow;
-Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;
-Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;
-Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;
-Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;
-Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;
-Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;
-Lkotlinx/coroutines/flow/internal/DownstreamExceptionContext;
-Lkotlinx/coroutines/flow/internal/FusibleFlow;
-Lkotlinx/coroutines/flow/internal/NoOpContinuation;
-Lkotlinx/coroutines/flow/internal/NopCollector;
-Lkotlinx/coroutines/flow/internal/NullSurrogateKt;
-Lkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;
-Lkotlinx/coroutines/flow/internal/SafeCollector;
-Lkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;
-Lkotlinx/coroutines/flow/internal/SafeCollectorKt;
-Lkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;
-Lkotlinx/coroutines/flow/internal/SendingCollector;
-Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;
-Lkotlinx/coroutines/internal/AtomicKt;
-Lkotlinx/coroutines/internal/AtomicOp;
-Lkotlinx/coroutines/internal/ContextScope;
-Lkotlinx/coroutines/internal/DispatchedContinuation;
-Lkotlinx/coroutines/internal/DispatchedContinuationKt;
-Lkotlinx/coroutines/internal/LimitedDispatcher;
-Lkotlinx/coroutines/internal/LockFreeLinkedListHead;
-Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;
-Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-Lkotlinx/coroutines/internal/LockFreeTaskQueue;
-Lkotlinx/coroutines/internal/LockFreeTaskQueueCore;
-Lkotlinx/coroutines/internal/MainDispatcherFactory;
-Lkotlinx/coroutines/internal/MainDispatcherLoader$$ExternalSyntheticServiceLoad0;
-Lkotlinx/coroutines/internal/MainDispatcherLoader;
-Lkotlinx/coroutines/internal/OnUndeliveredElementKt$bindCancellationFun$1;
-Lkotlinx/coroutines/internal/OnUndeliveredElementKt;
-Lkotlinx/coroutines/internal/OpDescriptor;
-Lkotlinx/coroutines/internal/Removed;
-Lkotlinx/coroutines/internal/ResizableAtomicArray;
-Lkotlinx/coroutines/internal/ScopeCoroutine;
-Lkotlinx/coroutines/internal/StackTraceRecoveryKt;
-Lkotlinx/coroutines/internal/Symbol;
-Lkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;
-Lkotlinx/coroutines/internal/ThreadContextKt$countAll$1;
-Lkotlinx/coroutines/internal/ThreadContextKt;
-Lkotlinx/coroutines/intrinsics/UndispatchedKt;
-Lkotlinx/coroutines/scheduling/CoroutineScheduler;
-Lkotlinx/coroutines/scheduling/DefaultIoScheduler;
-Lkotlinx/coroutines/scheduling/DefaultScheduler;
-Lkotlinx/coroutines/scheduling/GlobalQueue;
-Lkotlinx/coroutines/scheduling/NanoTimeSource;
-Lkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;
-Lkotlinx/coroutines/scheduling/SchedulerTimeSource;
-Lkotlinx/coroutines/scheduling/Task;
-Lkotlinx/coroutines/scheduling/TaskContext;
-Lkotlinx/coroutines/scheduling/TaskContextImpl;
-Lkotlinx/coroutines/scheduling/TasksKt;
-Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler;
-Lkotlinx/coroutines/sync/Empty;
-Lkotlinx/coroutines/sync/Mutex;
-Lkotlinx/coroutines/sync/MutexImpl$LockCont$tryResumeLockWaiter$1;
-Lkotlinx/coroutines/sync/MutexImpl$LockCont;
-Lkotlinx/coroutines/sync/MutexImpl$LockWaiter;
-Lkotlinx/coroutines/sync/MutexImpl$LockedQueue;
-Lkotlinx/coroutines/sync/MutexImpl$UnlockOp;
-Lkotlinx/coroutines/sync/MutexImpl;
-Lkotlinx/coroutines/sync/MutexKt;
-PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
-PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->forward(Landroidx/arch/core/internal/SafeIterableMap$Entry;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
-PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;
-PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
-PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;-><init>(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function4;II)V
-PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$4;-><clinit>()V
-PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$4;-><init>()V
-PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$3;-><init>(Ljava/lang/Object;)V
-PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$4$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentScope;)V
-PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$4$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1;-><init>(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Landroidx/compose/animation/AnimatedContentScope;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/snapshots/SnapshotStateList;)V
-PLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;-><clinit>()V
-PLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;-><init>()V
-PLandroidx/compose/animation/AnimatedContentMeasurePolicy;-><init>(Landroidx/compose/animation/AnimatedContentScope;)V
-PLandroidx/compose/animation/AnimatedContentScope$ChildData;-><init>(Z)V
-PLandroidx/compose/animation/AnimatedContentScope$ChildData;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/animation/AnimatedContentScope$ChildData;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/AnimatedContentScope$SizeModifier$measure$1;-><init>(JLandroidx/compose/ui/layout/Placeable;)V
-PLandroidx/compose/animation/AnimatedContentScope$SizeModifier$measure$size$1;-><init>(Landroidx/compose/animation/AnimatedContentScope;Landroidx/compose/animation/AnimatedContentScope$SizeModifier;)V
-PLandroidx/compose/animation/AnimatedContentScope$SizeModifier$measure$size$2;-><init>(Landroidx/compose/animation/AnimatedContentScope;)V
-PLandroidx/compose/animation/AnimatedContentScope$SizeModifier;-><init>(Landroidx/compose/animation/AnimatedContentScope;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/runtime/MutableState;)V
-PLandroidx/compose/animation/AnimatedContentScope;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/unit/LayoutDirection;)V
-PLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;-><init>(Ljava/util/ArrayList;)V
-PLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;-><init>(Landroidx/compose/animation/AnimatedVisibilityScopeImpl;)V
-PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1;-><init>(Landroidx/compose/animation/core/Transition;)V
-PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2;-><init>(Landroidx/compose/runtime/MutableState;)V
-PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$7;-><clinit>()V
-PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$7;-><init>()V
-PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->getTransition()Landroidx/compose/animation/core/Transition;
-PLandroidx/compose/animation/EnterExitState;-><clinit>()V
-PLandroidx/compose/animation/EnterExitState;-><init>(ILjava/lang/String;)V
-PLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;-><clinit>()V
-PLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;-><init>()V
-PLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2;-><clinit>()V
-PLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2;-><init>()V
-PLandroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1;-><init>(Landroidx/compose/runtime/State;)V
-PLandroidx/compose/animation/EnterExitTransitionKt$slideInHorizontally$2;-><init>(Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$1;-><clinit>()V
-PLandroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$1;-><init>()V
-PLandroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$2;-><init>(Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/animation/EnterExitTransitionKt;-><clinit>()V
-PLandroidx/compose/animation/EnterExitTransitionKt;->fadeIn$default(Landroidx/compose/animation/core/TweenSpec;I)Landroidx/compose/animation/EnterTransitionImpl;
-PLandroidx/compose/animation/EnterExitTransitionKt;->fadeOut$default(Landroidx/compose/animation/core/TweenSpec;I)Landroidx/compose/animation/ExitTransitionImpl;
-PLandroidx/compose/animation/EnterTransition;-><clinit>()V
-PLandroidx/compose/animation/EnterTransition;-><init>()V
-PLandroidx/compose/animation/EnterTransitionImpl;-><init>(Landroidx/compose/animation/TransitionData;)V
-PLandroidx/compose/animation/ExitTransition;-><clinit>()V
-PLandroidx/compose/animation/ExitTransition;-><init>()V
-PLandroidx/compose/animation/ExitTransitionImpl;-><init>(Landroidx/compose/animation/TransitionData;)V
-PLandroidx/compose/animation/Fade;-><init>(FLandroidx/compose/animation/core/FiniteAnimationSpec;)V
-PLandroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics;-><init>()V
-PLandroidx/compose/animation/SizeTransformImpl;-><init>(ZLkotlin/jvm/functions/Function2;)V
-PLandroidx/compose/animation/SizeTransformImpl;->getClip()Z
-PLandroidx/compose/animation/Slide;-><init>(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/animation/Slide;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/animation/SlideModifier$measure$1;-><init>(Landroidx/compose/animation/SlideModifier;Landroidx/compose/ui/layout/Placeable;J)V
-PLandroidx/compose/animation/SlideModifier$transitionSpec$1;-><init>(Landroidx/compose/animation/SlideModifier;)V
-PLandroidx/compose/animation/TransitionData;-><init>(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;)V
-PLandroidx/compose/animation/TransitionData;-><init>(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;I)V
-PLandroidx/compose/animation/TransitionData;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/animation/core/Animatable;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Float;I)V
-PLandroidx/compose/animation/core/AnimationVector2D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
-PLandroidx/compose/animation/core/CubicBezierEasing;-><init>(F)V
-PLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/animation/core/EasingKt$LinearEasing$1;-><clinit>()V
-PLandroidx/compose/animation/core/EasingKt$LinearEasing$1;-><init>()V
-PLandroidx/compose/animation/core/EasingKt;-><clinit>()V
-PLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;-><init>(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$TransitionAnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/animation/core/Transition$animateTo$1$1;-><init>(Landroidx/compose/animation/core/Transition;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/animation/core/Transition$animateTo$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/Transition$totalDurationNanos$2;-><init>(Landroidx/compose/animation/core/Transition;)V
-PLandroidx/compose/animation/core/Transition$updateTarget$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition;)V
-PLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition;)V
-PLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;)V
-PLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;)V
-PLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V
-PLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V
-PLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/animation/core/Transition;)V
-PLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;-><init>(Landroidx/compose/animation/core/Transition;)V
-PLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/TransitionKt$updateTransition$2$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/animation/core/Transition;)V
-PLandroidx/compose/animation/core/TransitionKt$updateTransition$2$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/animation/core/TransitionKt$updateTransition$2$1;-><init>(Landroidx/compose/animation/core/Transition;)V
-PLandroidx/compose/animation/core/TransitionKt$updateTransition$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/TweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
-PLandroidx/compose/animation/core/TweenSpec;-><init>(ILandroidx/compose/animation/core/Easing;I)V
-PLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/VectorizedFiniteAnimationSpec;->isInfinite()V
-PLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
-PLandroidx/compose/foundation/BorderKt;->shrink-Kibmq7A(FJ)J
-PLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/interaction/PressInteraction$Press;-><init>(J)V
-PLandroidx/compose/foundation/layout/BoxChildData;-><init>(Landroidx/compose/ui/BiasAlignment;)V
-PLandroidx/compose/foundation/layout/BoxChildData;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/layout/BoxChildData;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/layout/BoxScopeInstance;-><clinit>()V
-PLandroidx/compose/foundation/layout/BoxScopeInstance;-><init>()V
-PLandroidx/compose/foundation/layout/BoxScopeInstance;->align()Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/layout/PaddingValuesImpl;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/PaddingValuesModifier;)V
-PLandroidx/compose/foundation/layout/PaddingValuesModifier;-><init>(Landroidx/compose/foundation/layout/PaddingValues;)V
-PLandroidx/compose/foundation/layout/PaddingValuesModifier;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default()Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V
-PLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;-><init>(FF)V
-PLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;-><init>(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->dispose()V
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onForgotten()V
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onRemembered()V
-PLandroidx/compose/material/ripple/DebugRippleTheme;-><clinit>()V
-PLandroidx/compose/material/ripple/DebugRippleTheme;-><init>()V
-PLandroidx/compose/material/ripple/DebugRippleTheme;->defaultColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J
-PLandroidx/compose/material/ripple/DebugRippleTheme;->rippleAlpha(Landroidx/compose/runtime/Composer;)Landroidx/compose/material/ripple/RippleAlpha;
-PLandroidx/compose/material/ripple/PlatformRipple;-><init>(ZFLandroidx/compose/runtime/MutableState;)V
-PLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$invokeSuspend$$inlined$collect$1;-><init>(Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlinx/coroutines/CoroutineScope;)V
-PLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$invokeSuspend$$inlined$collect$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/material/ripple/Ripple;-><init>(ZFLandroidx/compose/runtime/MutableState;)V
-PLandroidx/compose/material/ripple/Ripple;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/material/ripple/RippleAlpha;-><init>(FFFF)V
-PLandroidx/compose/material/ripple/RippleAlpha;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/material/ripple/RippleAnimationKt;-><clinit>()V
-PLandroidx/compose/material/ripple/RippleAnimationKt;->getRippleEndRadius-cSwnlzA(Landroidx/compose/ui/unit/Density;ZJ)F
-PLandroidx/compose/material/ripple/RippleContainer;-><init>(Landroid/content/Context;)V
-PLandroidx/compose/material/ripple/RippleHostMap;-><init>()V
-PLandroidx/compose/material/ripple/RippleHostView;-><clinit>()V
-PLandroidx/compose/material/ripple/RippleHostView;-><init>(Landroid/content/Context;)V
-PLandroidx/compose/material/ripple/RippleHostView;->refreshDrawableState()V
-PLandroidx/compose/material/ripple/RippleIndicationInstance;-><init>(Landroidx/compose/runtime/MutableState;Z)V
-PLandroidx/compose/material/ripple/RippleKt;-><clinit>()V
-PLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;-><clinit>()V
-PLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;-><init>()V
-PLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/material/ripple/RippleThemeKt;-><clinit>()V
-PLandroidx/compose/material/ripple/StateLayer;-><init>(Landroidx/compose/runtime/MutableState;Z)V
-PLandroidx/compose/material3/ButtonColors;-><init>(JJJJ)V
-PLandroidx/compose/material3/ButtonDefaults;-><clinit>()V
-PLandroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateList;)V
-PLandroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/material3/ButtonElevation$animateElevation$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/material3/ButtonElevation;-><init>(FFFFF)V
-PLandroidx/compose/material3/ButtonKt$Button$2$1$1;-><init>(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V
-PLandroidx/compose/material3/ButtonKt$Button$2$1;-><init>(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V
-PLandroidx/compose/material3/ButtonKt$Button$2;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V
-PLandroidx/compose/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
-PLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J
-PLandroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;-><clinit>()V
-PLandroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;-><init>()V
-PLandroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/material3/ColorSchemeKt;-><clinit>()V
-PLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;-><clinit>()V
-PLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;-><init>()V
-PLandroidx/compose/material3/ContentColorKt;-><clinit>()V
-PLandroidx/compose/material3/ElevationKt;-><clinit>()V
-PLandroidx/compose/material3/MinimumTouchTargetModifier$measure$1;-><init>(ILandroidx/compose/ui/layout/Placeable;I)V
-PLandroidx/compose/material3/MinimumTouchTargetModifier;-><init>(J)V
-PLandroidx/compose/material3/MinimumTouchTargetModifier;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/material3/ShapeDefaults;-><clinit>()V
-PLandroidx/compose/material3/Shapes;-><init>(I)V
-PLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><clinit>()V
-PLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><init>()V
-PLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/material3/ShapesKt;-><clinit>()V
-PLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;-><clinit>()V
-PLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;-><init>()V
-PLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/material3/SurfaceKt;-><clinit>()V
-PLandroidx/compose/material3/TouchTargetKt$LocalMinimumTouchTargetEnforcement$1;-><clinit>()V
-PLandroidx/compose/material3/TouchTargetKt$LocalMinimumTouchTargetEnforcement$1;-><init>()V
-PLandroidx/compose/material3/TouchTargetKt$LocalMinimumTouchTargetEnforcement$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2;-><clinit>()V
-PLandroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2;-><init>()V
-PLandroidx/compose/material3/TouchTargetKt;-><clinit>()V
-PLandroidx/compose/material3/Typography;-><init>(I)V
-PLandroidx/compose/material3/TypographyKt$LocalTypography$1;-><clinit>()V
-PLandroidx/compose/material3/TypographyKt$LocalTypography$1;-><init>()V
-PLandroidx/compose/material3/TypographyKt$LocalTypography$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/material3/TypographyKt;-><clinit>()V
-PLandroidx/compose/material3/tokens/ColorLightTokens;-><clinit>()V
-PLandroidx/compose/material3/tokens/ElevationTokens;-><clinit>()V
-PLandroidx/compose/material3/tokens/FilledButtonTokens;-><clinit>()V
-PLandroidx/compose/material3/tokens/PaletteTokens;-><clinit>()V
-PLandroidx/compose/material3/tokens/ShapeTokens;-><clinit>()V
-PLandroidx/compose/material3/tokens/TypeScaleTokens;-><clinit>()V
-PLandroidx/compose/material3/tokens/TypefaceTokens;-><clinit>()V
-PLandroidx/compose/material3/tokens/TypographyTokens;-><clinit>()V
-PLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V
-PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V
-PLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;-><init>(II)V
-PLandroidx/compose/runtime/ComposerImpl$start$2;-><init>(I)V
-PLandroidx/compose/runtime/ComposerImpl;->reportAllMovableContent()V
-PLandroidx/compose/runtime/CompositionContext;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
-PLandroidx/compose/runtime/JoinedKey;-><init>(Ljava/lang/Integer;Ljava/lang/Object;)V
-PLandroidx/compose/runtime/JoinedKey;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;-><init>(Landroidx/compose/runtime/Recomposer;Ljava/lang/Throwable;)V
-PLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/Recomposer;->cancel()V
-PLandroidx/compose/runtime/collection/IdentityScopeMap;->clear()V
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->contains(Ljava/lang/Object;)Z
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->addAll(Ljava/util/Collection;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->remove(IILjava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;
-PLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator;
-PLandroidx/compose/runtime/snapshots/SnapshotStateList;->addAll(Ljava/util/Collection;)Z
-PLandroidx/compose/runtime/snapshots/SnapshotStateList;->clear()V
-PLandroidx/compose/runtime/snapshots/SnapshotStateList;->contains(Ljava/lang/Object;)Z
-PLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z
-PLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$validateRange(II)V
-PLandroidx/compose/ui/Modifier$Node;->isValid()Z
-PLandroidx/compose/ui/autofill/AutofillCallback;->unregister(Landroidx/compose/ui/autofill/AndroidAutofill;)V
-PLandroidx/compose/ui/focus/FocusOwnerImpl;->clearFocus(ZZ)V
-PLandroidx/compose/ui/focus/FocusOwnerImpl;->getFocusRect()Landroidx/compose/ui/geometry/Rect;
-PLandroidx/compose/ui/focus/FocusPropertiesImpl;->getCanFocus()Z
-PLandroidx/compose/ui/focus/FocusRequester$requestFocus$2;-><clinit>()V
-PLandroidx/compose/ui/focus/FocusRequester$requestFocus$2;-><init>()V
-PLandroidx/compose/ui/focus/FocusRequester$requestFocus$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/focus/FocusRequester;->requestFocus()V
-PLandroidx/compose/ui/focus/FocusTargetModifierNode$invalidateFocus$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/ui/focus/FocusTargetModifierNode;)V
-PLandroidx/compose/ui/focus/FocusTargetModifierNode$invalidateFocus$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/ui/focus/FocusTargetModifierNode;->scheduleInvalidationForFocusEvents$ui_release()V
-PLandroidx/compose/ui/geometry/Offset;->getDistance-impl(J)F
-PLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;)V
-PLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer$$inlined$modifierElementOf$1;->create()Landroidx/compose/ui/Modifier$Node;
-PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F
-PLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRoundRect-ZuiqVtQ$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJJLandroidx/compose/ui/graphics/drawscope/Stroke;I)V
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getValue()Ljava/lang/Object;
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->resumeWith(Ljava/lang/Object;)V
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/layout/ContentScale$Companion$FillBounds$1;->computeScaleFactor-H7hwNQA(JJ)J
-PLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;-><init>(Landroidx/compose/ui/modifier/ModifierLocalManager;)V
-PLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V
-PLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/node/LayoutNode;->isPlacedInLookahead()Ljava/lang/Boolean;
-PLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/arch/core/executor/TaskExecutor;Landroidx/compose/ui/graphics/ColorFilter;I)V
-PLandroidx/compose/ui/node/LayoutNodeDrawScope;->toPx-0680j_4(F)F
-PLandroidx/compose/ui/node/LayoutNodeKt;->Animatable$default()Landroidx/compose/animation/core/Animatable;
-PLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getCanAffectParentInLookahead(Landroidx/compose/ui/node/LayoutNode;)Z
-PLandroidx/compose/ui/node/NodeChainKt$fillVector$1;-><init>(Landroidx/compose/runtime/collection/MutableVector;)V
-PLandroidx/compose/ui/node/NodeKind;->tween$default(IILandroidx/compose/animation/core/Easing;I)Landroidx/compose/animation/core/TweenSpec;
-PLandroidx/compose/ui/node/UiApplier;->remove(II)V
-PLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager;
-PLandroidx/compose/ui/platform/AndroidComposeView;->onDetachedFromWindow()V
-PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewDetachedFromWindow(Landroid/view/View;)V
-PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->onViewDetachedFromWindow(Landroid/view/View;)V
-PLandroidx/compose/ui/platform/ViewConfiguration;->getMinimumTouchTargetSize-MYxV2XQ()J
-PLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V
-PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V
-PLandroidx/compose/ui/platform/WrappedComposition;->dispose()V
-PLandroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/unit/Constraints$Companion;->fixedHeight-OenEA2s(I)J
-PLandroidx/compose/ui/unit/DpKt;->DpSize-YgX7TsA(FF)J
-PLandroidx/compose/ui/unit/DpSize;-><clinit>()V
-PLandroidx/compose/ui/unit/DpSize;->getHeight-D9Ej5fM(J)F
-PLandroidx/compose/ui/unit/DpSize;->getWidth-D9Ej5fM(J)F
-PLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;-><init>()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;-><clinit>()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;-><init>()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;-><init>(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V
-PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casListeners(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;)Z
-PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casValue(Landroidx/concurrent/futures/AbstractResolvableFuture;Ljava/lang/Object;Ljava/lang/Object;)Z
-PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casWaiters(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;)Z
-PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><clinit>()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><init>(I)V
-PLandroidx/concurrent/futures/AbstractResolvableFuture;-><clinit>()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture;-><init>()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture;->complete(Landroidx/concurrent/futures/AbstractResolvableFuture;)V
-PLandroidx/concurrent/futures/ResolvableFuture;-><init>()V
-PLandroidx/core/R$styleable;-><clinit>()V
-PLandroidx/core/R$styleable;->yield(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object;
-PLandroidx/core/view/ViewKt$ancestors$1;-><clinit>()V
-PLandroidx/core/view/ViewKt$ancestors$1;-><init>()V
-PLandroidx/core/view/ViewKt$ancestors$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/lifecycle/DefaultLifecycleObserver;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V
-PLandroidx/lifecycle/DefaultLifecycleObserver;->onStop(Landroidx/lifecycle/LifecycleOwner;)V
-PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
-PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
-PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
-PLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityStopped(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityPaused(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityStopped(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreDestroyed(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPrePaused(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreStopped(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment;->onDestroy()V
-PLandroidx/lifecycle/ReportFragment;->onPause()V
-PLandroidx/lifecycle/ReportFragment;->onStop()V
-PLandroidx/metrics/performance/JankStatsApi24Impl;->removeFrameMetricsListenerDelegate(Landroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;Landroid/view/Window;)V
-PLandroidx/profileinstaller/ProfileInstallReceiver$$ExternalSyntheticLambda0;-><init>()V
-PLandroidx/profileinstaller/ProfileInstaller$1;-><init>()V
-PLandroidx/profileinstaller/ProfileInstaller$1;->onResultReceived(ILjava/lang/Object;)V
-PLandroidx/profileinstaller/ProfileInstaller$2;-><init>()V
-PLandroidx/profileinstaller/ProfileInstaller;-><clinit>()V
-PLandroidx/profileinstaller/ProfileInstaller;->writeProfile(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Z)V
-PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->run()V
-PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;-><init>(Landroid/content/Context;)V
-PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;->run()V
-PLandroidx/profileinstaller/ProfileVerifier$Cache;-><init>(IIJJ)V
-PLandroidx/profileinstaller/ProfileVerifier$Cache;->writeOnFile(Ljava/io/File;)V
-PLandroidx/profileinstaller/ProfileVerifier$CompilationStatus;-><init>()V
-PLandroidx/profileinstaller/ProfileVerifier;-><clinit>()V
-PLandroidx/profileinstaller/ProfileVerifier;->getPackageLastUpdateTime(Landroid/content/Context;)J
-PLandroidx/profileinstaller/ProfileVerifier;->setCompilationStatus(IZZ)Landroidx/profileinstaller/ProfileVerifier$CompilationStatus;
-PLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/content/Context;Z)V
-PLandroidx/tv/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt$lambda-1$1;-><clinit>()V
-PLandroidx/tv/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt$lambda-1$1;-><init>()V
-PLandroidx/tv/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt;-><clinit>()V
-PLandroidx/tv/foundation/lazy/grid/EmptyTvLazyGridLayoutInfo;-><clinit>()V
-PLandroidx/tv/foundation/lazy/grid/EmptyTvLazyGridLayoutInfo;-><init>()V
-PLandroidx/tv/foundation/lazy/grid/ItemIndex;-><init>(I)V
-PLandroidx/tv/foundation/lazy/grid/ItemIndex;->equals(Ljava/lang/Object;)Z
-PLandroidx/tv/foundation/lazy/grid/LazyGridDslKt$rememberColumnWidthSums$1$1;-><init>(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/tv/foundation/lazy/grid/TvGridCells;Landroidx/compose/foundation/layout/Arrangement$Horizontal;)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridDslKt$rememberRowHeightSums$1$1;-><init>(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/tv/foundation/lazy/grid/TvGridCells;Landroidx/compose/foundation/layout/Arrangement$Vertical;)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridDslKt;->TvLazyHorizontalGrid(IILandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/PivotOffsets;Landroidx/tv/foundation/lazy/grid/TvGridCells;Landroidx/tv/foundation/lazy/grid/TvLazyGridState;Lkotlin/jvm/functions/Function1;ZZ)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridDslKt;->TvLazyVerticalGrid(IILandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/PivotOffsets;Landroidx/tv/foundation/lazy/grid/TvGridCells;Landroidx/tv/foundation/lazy/grid/TvLazyGridState;Lkotlin/jvm/functions/Function1;ZZ)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridIntervalContent;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;-><init>(Lkotlinx/coroutines/CoroutineScope;Z)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;-><init>(Landroidx/compose/foundation/lazy/layout/MutableIntervalList;ZLkotlin/ranges/IntRange;)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->getSpanLayoutProvider()Landroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$itemProviderState$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$itemProviderState$1;->invoke()Ljava/lang/Object;
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$1$1;-><init>(Landroidx/tv/foundation/lazy/grid/TvLazyGridState;)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$1$1;->invoke()Ljava/lang/Object;
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$2;-><clinit>()V
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$2;-><init>()V
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$2;->invoke()Ljava/lang/Object;
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$3;-><clinit>()V
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$3;-><init>()V
-PLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$3;->invoke()Ljava/lang/Object;
-PLandroidx/tv/foundation/lazy/grid/LazyGridKt$ScrollPositionUpdater$1;-><init>(Landroidx/tv/foundation/lazy/grid/LazyGridItemProvider;Landroidx/tv/foundation/lazy/grid/TvLazyGridState;I)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1;-><init>(ZLandroidx/compose/foundation/layout/PaddingValues;ZLandroidx/tv/foundation/lazy/grid/TvLazyGridState;Landroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridKt;->ScrollPositionUpdater(Landroidx/tv/foundation/lazy/grid/LazyGridItemProvider;Landroidx/tv/foundation/lazy/grid/TvLazyGridState;Landroidx/compose/runtime/Composer;I)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$3;-><init>(Ljava/util/ArrayList;)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridPositionedItem;->getColumn()I
-PLandroidx/tv/foundation/lazy/grid/LazyGridPositionedItem;->getIndex()I
-PLandroidx/tv/foundation/lazy/grid/LazyGridPositionedItem;->getRow()I
-PLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;-><init>(II)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider$Bucket;-><init>(II)V
-PLandroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;-><init>(Landroidx/tv/foundation/lazy/grid/LazyGridItemProvider;)V
-PLandroidx/tv/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1$scrollAxisRange$1;-><init>(Landroidx/tv/foundation/lazy/grid/TvLazyGridState;)V
-PLandroidx/tv/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1$scrollAxisRange$2;-><init>(Landroidx/tv/foundation/lazy/grid/TvLazyGridState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V
-PLandroidx/tv/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1;-><init>(ZLandroidx/tv/foundation/lazy/grid/TvLazyGridState;Landroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;)V
-PLandroidx/tv/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo;
-PLandroidx/tv/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1;->scrollAxisRange()Landroidx/compose/ui/semantics/ScrollAxisRange;
-PLandroidx/tv/foundation/lazy/grid/LineIndex;-><init>(I)V
-PLandroidx/tv/foundation/lazy/grid/TvGridCells$Fixed;-><init>(I)V
-PLandroidx/tv/foundation/lazy/grid/TvGridItemSpan;-><init>(J)V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridItemScopeImpl;-><clinit>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridItemScopeImpl;-><init>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridMeasureResult;->getAlignmentLines()Ljava/util/Map;
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridMeasureResult;->getHeight()I
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridMeasureResult;->getTotalItemsCount()I
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridMeasureResult;->getVisibleItemsInfo()Ljava/util/List;
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridMeasureResult;->getWidth()I
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridMeasureResult;->placeChildren()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridScope$items$1;-><clinit>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridScope$items$1;-><init>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridScope;->items$default(Landroidx/tv/foundation/lazy/grid/TvLazyGridScope;ILandroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridScopeImpl$DefaultSpan$1;-><clinit>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridScopeImpl$DefaultSpan$1;-><init>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridScopeImpl;-><init>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridScopeImpl;->items(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState$Companion$Saver$1;-><clinit>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState$Companion$Saver$1;-><init>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState$Companion$Saver$2;-><clinit>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState$Companion$Saver$2;-><init>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState$prefetchInfoRetriever$2;-><clinit>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState$prefetchInfoRetriever$2;-><init>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState$remeasurementModifier$1;-><init>(Landroidx/tv/foundation/lazy/grid/TvLazyGridState;)V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/layout/Remeasurement;)V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState$scroll$1;-><init>(Landroidx/tv/foundation/lazy/grid/TvLazyGridState;Lkotlin/coroutines/Continuation;)V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState$scroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState$scrollableState$1;-><init>(Landroidx/tv/foundation/lazy/grid/TvLazyGridState;)V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState;-><clinit>()V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState;->getCanScrollBackward()Z
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridState;->getCanScrollForward()Z
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridStateKt$rememberTvLazyGridState$1$1;-><init>(II)V
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridStateKt$rememberTvLazyGridState$1$1;->invoke()Ljava/lang/Object;
-PLandroidx/tv/foundation/lazy/grid/TvLazyGridStateKt;->rememberTvLazyGridState(Landroidx/compose/runtime/Composer;)Landroidx/tv/foundation/lazy/grid/TvLazyGridState;
-PLandroidx/tv/foundation/lazy/list/LazyDslKt;->TvLazyColumn(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;ZLandroidx/tv/foundation/PivotOffsets;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
-PLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsModifierLocal$layout$2;->getHasMoreContent()Z
-PLandroidx/tv/material3/BringIntoViewIfChildrenAreFocusedKt$bringIntoViewIfChildrenAreFocused$2$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;)V
-PLandroidx/tv/material3/BringIntoViewIfChildrenAreFocusedKt$bringIntoViewIfChildrenAreFocused$2$2$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;)V
-PLandroidx/tv/material3/BringIntoViewIfChildrenAreFocusedKt$bringIntoViewIfChildrenAreFocused$2$2$1;->bringChildIntoView(Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier$bringChildIntoView$2$1$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/tv/material3/BringIntoViewIfChildrenAreFocusedKt$bringIntoViewIfChildrenAreFocused$2$2$1;->calculateRectForParent(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect;
-PLandroidx/tv/material3/BringIntoViewIfChildrenAreFocusedKt$bringIntoViewIfChildrenAreFocused$2;-><clinit>()V
-PLandroidx/tv/material3/BringIntoViewIfChildrenAreFocusedKt$bringIntoViewIfChildrenAreFocused$2;-><init>()V
-PLandroidx/tv/material3/CarouselDefaults;-><clinit>()V
-PLandroidx/tv/material3/CarouselDefaults;-><init>()V
-PLandroidx/tv/material3/CarouselItemDefaults$OverlayEnterTransition$1;-><clinit>()V
-PLandroidx/tv/material3/CarouselItemDefaults$OverlayEnterTransition$1;-><init>()V
-PLandroidx/tv/material3/CarouselItemDefaults;-><clinit>()V
-PLandroidx/tv/material3/CarouselItemKt$CarouselItem$1$1;-><init>(Landroidx/compose/ui/focus/FocusManager;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-PLandroidx/tv/material3/CarouselItemKt$CarouselItem$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselItemKt$CarouselItem$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselItemKt$CarouselItem$1;-><init>(Landroidx/compose/animation/core/MutableTransitionState;Landroidx/compose/ui/focus/FocusManager;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-PLandroidx/tv/material3/CarouselItemKt$CarouselItem$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/tv/material3/CarouselItemKt$CarouselItem$2$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-PLandroidx/tv/material3/CarouselItemKt$CarouselItem$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselItemKt$CarouselItem$3;-><init>(Landroidx/compose/ui/focus/FocusManager;Landroidx/compose/animation/core/MutableTransitionState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
-PLandroidx/tv/material3/CarouselItemKt$CarouselItem$4$1;-><init>(JLandroidx/compose/animation/core/MutableTransitionState;Lkotlin/coroutines/Continuation;)V
-PLandroidx/tv/material3/CarouselItemKt$CarouselItem$4$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/tv/material3/CarouselItemKt$CarouselItem$4$2;-><init>(ILkotlin/jvm/functions/Function2;)V
-PLandroidx/tv/material3/CarouselItemKt$onAnimationCompletion$1;-><init>(Lkotlin/coroutines/Continuation;)V
-PLandroidx/tv/material3/CarouselItemKt$onAnimationCompletion$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselItemKt$onAnimationCompletion$2;-><init>(Landroidx/compose/animation/core/MutableTransitionState;)V
-PLandroidx/tv/material3/CarouselItemKt$onAnimationCompletion$3;-><init>(Lkotlin/coroutines/Continuation;)V
-PLandroidx/tv/material3/CarouselItemKt$onAnimationCompletion$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/tv/material3/CarouselItemKt$onAnimationCompletion$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselItemKt$onAnimationCompletion$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselKt$AutoScrollSideEffect$2$1;-><init>(JLandroidx/tv/material3/CarouselState;ILkotlin/coroutines/Continuation;)V
-PLandroidx/tv/material3/CarouselKt$AutoScrollSideEffect$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/tv/material3/CarouselKt$AutoScrollSideEffect$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselKt$Carousel$3$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-PLandroidx/tv/material3/CarouselKt$Carousel$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselKt$Carousel$4;-><init>(Landroidx/compose/ui/focus/FocusManager;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
-PLandroidx/tv/material3/CarouselKt$Carousel$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselKt$Carousel$5$1$1;-><init>(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V
-PLandroidx/tv/material3/CarouselKt$Carousel$5$2$1$1;-><init>(Landroidx/compose/ui/focus/FocusRequester;Landroidx/compose/ui/focus/FocusManager;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-PLandroidx/tv/material3/CarouselKt$Carousel$5$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselKt$Carousel$5$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselKt$Carousel$5$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/tv/material3/CarouselKt$Carousel$5$2;-><init>(Lkotlin/jvm/functions/Function3;ILandroidx/compose/ui/focus/FocusRequester;Landroidx/compose/ui/focus/FocusManager;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
-PLandroidx/tv/material3/CarouselKt$CarouselStateUpdater$1$1;-><init>(ILandroidx/tv/material3/CarouselState;Lkotlin/coroutines/Continuation;)V
-PLandroidx/tv/material3/CarouselKt$CarouselStateUpdater$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/tv/material3/CarouselKt$CarouselStateUpdater$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselKt$handleKeyEvents$1$showPreviousSlideAndGetKeyEventPropagation$1;-><init>(Landroidx/tv/material3/CarouselState;ILandroidx/compose/ui/focus/FocusRequester;)V
-PLandroidx/tv/material3/CarouselKt$handleKeyEvents$1$showPreviousSlideAndGetKeyEventPropagation$1;->invoke()Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselKt$handleKeyEvents$1;-><init>(Landroidx/compose/ui/focus/FocusManager;ZLandroidx/tv/material3/CarouselState;ILandroidx/compose/ui/focus/FocusRequester;)V
-PLandroidx/tv/material3/CarouselKt$onAnimationCompletion$1;-><init>(Lkotlin/coroutines/Continuation;)V
-PLandroidx/tv/material3/CarouselKt$onAnimationCompletion$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselKt$onAnimationCompletion$2;-><init>(Landroidx/compose/animation/AnimatedVisibilityScope;)V
-PLandroidx/tv/material3/CarouselKt$onAnimationCompletion$3;-><init>(Lkotlin/coroutines/Continuation;)V
-PLandroidx/tv/material3/CarouselKt$onAnimationCompletion$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/tv/material3/CarouselKt$onAnimationCompletion$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselKt$onAnimationCompletion$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/tv/material3/CarouselKt;->AutoScrollSideEffect(JILandroidx/tv/material3/CarouselState;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
-PLandroidx/tv/material3/CarouselKt;->CarouselStateUpdater(Landroidx/tv/material3/CarouselState;ILandroidx/compose/runtime/Composer;I)V
-PLandroidx/tv/material3/CarouselState;-><init>(I)V
-PLandroidx/tv/material3/CarouselState;->moveToNextSlide$tv_material_release(I)V
-PLandroidx/tv/material3/ComposableSingletons$CarouselKt$lambda-1$1;-><clinit>()V
-PLandroidx/tv/material3/ComposableSingletons$CarouselKt$lambda-1$1;-><init>()V
-PLandroidx/tv/material3/ComposableSingletons$CarouselKt;-><clinit>()V
-PLcom/example/tvcomposebasedtests/MainActivity;->onPause()V
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-1$1;-><clinit>()V
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-1$1;-><init>()V
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-2$1$1;-><init>(I)V
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-2$1;-><clinit>()V
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-2$1;-><init>()V
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-3$1;-><clinit>()V
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-3$1;-><init>()V
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt;-><clinit>()V
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt$lambda-6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/FeaturedCarouselKt$FeaturedCarousel$1;-><init>(IILandroidx/tv/material3/CarouselState;)V
-PLcom/example/tvcomposebasedtests/tvComponents/FeaturedCarouselKt$OverlayButton$1;-><clinit>()V
-PLcom/example/tvcomposebasedtests/tvComponents/FeaturedCarouselKt$OverlayButton$1;-><init>()V
-PLcom/example/tvcomposebasedtests/tvComponents/FeaturedCarouselKt$OverlayButton$2$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-PLcom/example/tvcomposebasedtests/tvComponents/FeaturedCarouselKt$OverlayButton$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/FeaturedCarouselKt$OverlayButton$3;-><init>(I)V
-PLcom/example/tvcomposebasedtests/tvComponents/FeaturedCarouselKt$OverlayButton$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/FeaturedCarouselKt;->FeaturedCarousel(ILandroidx/compose/runtime/Composer;I)V
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$SampleTvLazyColumn$1$1;-><init>(I)V
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$SampleTvLazyColumn$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$SampleTvLazyHorizontalGrid$1$1;-><init>(I)V
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$SampleTvLazyHorizontalGrid$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$SampleTvLazyVerticalGrid$1$1;-><init>(I)V
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$SampleTvLazyVerticalGrid$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$TvLazyRowsAndColumn$1$1$1$1$1$1;-><init>(II)V
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$TvLazyRowsAndColumn$1$1$1$1$1;-><init>(II)V
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$TvLazyRowsAndColumn$1$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$TvLazyRowsAndColumn$1$1$1;-><init>(II)V
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$TvLazyRowsAndColumn$1$1;-><init>(III)V
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$TvLazyRowsAndColumn$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt;->SampleTvLazyColumn(ILandroidx/compose/runtime/Composer;I)V
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt;->SampleTvLazyHorizontalGrid(IIILandroidx/compose/runtime/Composer;)V
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt;->SampleTvLazyVerticalGrid(IIILandroidx/compose/runtime/Composer;)V
-PLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt;->TvLazyRowsAndColumn(IIILandroidx/compose/runtime/Composer;)V
-PLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/google/gson/FieldNamingPolicy$1;-><init>()V
-PLcom/google/gson/FieldNamingPolicy$1;->translateName(Ljava/lang/reflect/Field;)Ljava/lang/String;
-PLcom/google/gson/FieldNamingPolicy$2;-><init>()V
-PLcom/google/gson/FieldNamingPolicy$3;-><init>()V
-PLcom/google/gson/FieldNamingPolicy$4;-><init>()V
-PLcom/google/gson/FieldNamingPolicy$5;-><init>()V
-PLcom/google/gson/FieldNamingPolicy$6;-><init>()V
-PLcom/google/gson/FieldNamingPolicy$7;-><init>()V
-PLcom/google/gson/FieldNamingPolicy;-><clinit>()V
-PLcom/google/gson/FieldNamingPolicy;-><init>(Ljava/lang/String;I)V
-PLcom/google/gson/Gson$1;-><init>()V
-PLcom/google/gson/Gson$2;-><init>()V
-PLcom/google/gson/Gson$4;-><init>(Lcom/google/gson/TypeAdapter;)V
-PLcom/google/gson/Gson$5;-><init>(Lcom/google/gson/TypeAdapter;)V
-PLcom/google/gson/Gson$FutureTypeAdapter;-><init>()V
-PLcom/google/gson/Gson;-><init>()V
-PLcom/google/gson/Gson;->newJsonWriter(Ljava/io/Writer;)Lcom/google/gson/stream/JsonWriter;
-PLcom/google/gson/Gson;->toJson(Lcom/google/gson/JsonObject;Lcom/google/gson/stream/JsonWriter;)V
-PLcom/google/gson/JsonArray;->iterator()Ljava/util/Iterator;
-PLcom/google/gson/JsonElement;->getAsJsonPrimitive()Lcom/google/gson/JsonPrimitive;
-PLcom/google/gson/JsonNull;-><clinit>()V
-PLcom/google/gson/JsonNull;-><init>()V
-PLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/String;)V
-PLcom/google/gson/TypeAdapter$1;-><init>(Lcom/google/gson/TypeAdapter;)V
-PLcom/google/gson/internal/$Gson$Types$ParameterizedTypeImpl;-><init>(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;[Ljava/lang/reflect/Type;)V
-PLcom/google/gson/internal/$Gson$Types$ParameterizedTypeImpl;->getActualTypeArguments()[Ljava/lang/reflect/Type;
-PLcom/google/gson/internal/$Gson$Types$ParameterizedTypeImpl;->getRawType()Ljava/lang/reflect/Type;
-PLcom/google/gson/internal/$Gson$Types$ParameterizedTypeImpl;->hashCode()I
-PLcom/google/gson/internal/$Gson$Types;-><clinit>()V
-PLcom/google/gson/internal/$Gson$Types;->checkNotPrimitive(Ljava/lang/reflect/Type;)V
-PLcom/google/gson/internal/$Gson$Types;->equals(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;)Z
-PLcom/google/gson/internal/$Gson$Types;->getGenericSupertype(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Type;
-PLcom/google/gson/internal/$Gson$Types;->getRawType(Ljava/lang/reflect/Type;)Ljava/lang/Class;
-PLcom/google/gson/internal/$Gson$Types;->getSupertype(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Type;
-PLcom/google/gson/internal/$Gson$Types;->resolve(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/reflect/Type;Ljava/util/HashMap;)Ljava/lang/reflect/Type;
-PLcom/google/gson/internal/ConstructorConstructor$13;-><init>()V
-PLcom/google/gson/internal/ConstructorConstructor$19;-><init>(Ljava/lang/Class;)V
-PLcom/google/gson/internal/ConstructorConstructor;-><init>(Ljava/util/Map;Ljava/util/List;)V
-PLcom/google/gson/internal/ConstructorConstructor;->checkInstantiable(Ljava/lang/Class;)Ljava/lang/String;
-PLcom/google/gson/internal/ConstructorConstructor;->get(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/internal/ObjectConstructor;
-PLcom/google/gson/internal/Excluder;-><clinit>()V
-PLcom/google/gson/internal/Excluder;-><init>()V
-PLcom/google/gson/internal/Excluder;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/Excluder;->excludeClassChecks(Ljava/lang/Class;)Z
-PLcom/google/gson/internal/Excluder;->excludeClassInStrategy(Ljava/lang/Class;Z)Z
-PLcom/google/gson/internal/Excluder;->isAnonymousOrNonStaticLocal(Ljava/lang/Class;)Z
-PLcom/google/gson/internal/LinkedTreeMap$1;-><init>()V
-PLcom/google/gson/internal/LinkedTreeMap$Node;-><init>(Z)V
-PLcom/google/gson/internal/LinkedTreeMap;-><clinit>()V
-PLcom/google/gson/internal/LinkedTreeMap;->entrySet()Ljava/util/Set;
-PLcom/google/gson/internal/ReflectionAccessFilterHelper;->getFilterResult(Ljava/util/List;Ljava/lang/Class;)I
-PLcom/google/gson/internal/bind/ArrayTypeAdapter$1;-><init>()V
-PLcom/google/gson/internal/bind/ArrayTypeAdapter$1;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/ArrayTypeAdapter;-><clinit>()V
-PLcom/google/gson/internal/bind/CollectionTypeAdapterFactory$Adapter;-><init>(Lcom/google/gson/Gson;Ljava/lang/reflect/Type;Lcom/google/gson/TypeAdapter;)V
-PLcom/google/gson/internal/bind/CollectionTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;)V
-PLcom/google/gson/internal/bind/CollectionTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/DateTypeAdapter$1;-><init>()V
-PLcom/google/gson/internal/bind/DateTypeAdapter$1;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/DateTypeAdapter;-><clinit>()V
-PLcom/google/gson/internal/bind/DefaultDateTypeAdapter$DateType;-><clinit>()V
-PLcom/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;)V
-PLcom/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/JsonTreeWriter$1;-><init>()V
-PLcom/google/gson/internal/bind/JsonTreeWriter;-><clinit>()V
-PLcom/google/gson/internal/bind/MapTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;)V
-PLcom/google/gson/internal/bind/MapTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/NumberTypeAdapter$1;-><init>(Lcom/google/gson/internal/bind/NumberTypeAdapter;)V
-PLcom/google/gson/internal/bind/NumberTypeAdapter$1;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/NumberTypeAdapter;-><clinit>()V
-PLcom/google/gson/internal/bind/NumberTypeAdapter;-><init>()V
-PLcom/google/gson/internal/bind/ObjectTypeAdapter$1;-><init>()V
-PLcom/google/gson/internal/bind/ObjectTypeAdapter$1;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/ObjectTypeAdapter;-><clinit>()V
-PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$1;-><init>(Ljava/lang/String;Ljava/lang/reflect/Field;ZZZLjava/lang/reflect/Method;ZLcom/google/gson/TypeAdapter;Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)V
-PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;-><init>(Ljava/util/LinkedHashMap;)V
-PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$BoundField;-><init>(Ljava/lang/String;Ljava/lang/reflect/Field;Z)V
-PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$FieldReflectionAdapter;-><init>(Ljava/util/LinkedHashMap;)V
-PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;Lcom/google/gson/internal/Excluder;Lcom/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory;Ljava/util/List;)V
-PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->getBoundFields(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;Ljava/lang/Class;ZZ)Ljava/util/LinkedHashMap;
-PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->includeField(Ljava/lang/reflect/Field;Z)Z
-PLcom/google/gson/internal/bind/SerializationDelegatingTypeAdapter;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$10;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$11;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$12;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$13;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$14;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$15;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$16;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$17;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$18;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$19;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$1;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$20;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$21;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$22;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$23;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$24;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$25;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$26;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$27;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$28;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$28;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
-PLcom/google/gson/internal/bind/TypeAdapters$29;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$29;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/TypeAdapters$2;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$31;-><init>(Ljava/lang/Class;Lcom/google/gson/TypeAdapter;)V
-PLcom/google/gson/internal/bind/TypeAdapters$31;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/TypeAdapters$32;-><init>(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/gson/TypeAdapter;)V
-PLcom/google/gson/internal/bind/TypeAdapters$32;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/TypeAdapters$33;-><init>(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/gson/internal/bind/TypeAdapters$26;)V
-PLcom/google/gson/internal/bind/TypeAdapters$33;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/TypeAdapters$34;-><init>(Ljava/lang/Class;Lcom/google/gson/TypeAdapter;)V
-PLcom/google/gson/internal/bind/TypeAdapters$34;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/bind/TypeAdapters$3;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$4;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$5;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$6;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$7;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$8;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters$9;-><init>()V
-PLcom/google/gson/internal/bind/TypeAdapters;-><clinit>()V
-PLcom/google/gson/internal/reflect/ReflectionHelper$RecordHelper;-><init>()V
-PLcom/google/gson/internal/reflect/ReflectionHelper$RecordNotSupportedHelper;-><init>()V
-PLcom/google/gson/internal/reflect/ReflectionHelper$RecordNotSupportedHelper;->isRecord(Ljava/lang/Class;)Z
-PLcom/google/gson/internal/reflect/ReflectionHelper$RecordSupportedHelper;-><init>()V
-PLcom/google/gson/internal/reflect/ReflectionHelper;-><clinit>()V
-PLcom/google/gson/internal/reflect/ReflectionHelper;->makeAccessible(Ljava/lang/reflect/AccessibleObject;)V
-PLcom/google/gson/internal/sql/SqlDateTypeAdapter$1;-><init>()V
-PLcom/google/gson/internal/sql/SqlDateTypeAdapter$1;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/sql/SqlDateTypeAdapter;-><clinit>()V
-PLcom/google/gson/internal/sql/SqlTimeTypeAdapter$1;-><init>()V
-PLcom/google/gson/internal/sql/SqlTimeTypeAdapter$1;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/sql/SqlTimeTypeAdapter;-><clinit>()V
-PLcom/google/gson/internal/sql/SqlTimestampTypeAdapter$1;-><init>()V
-PLcom/google/gson/internal/sql/SqlTimestampTypeAdapter$1;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
-PLcom/google/gson/internal/sql/SqlTimestampTypeAdapter;-><clinit>()V
-PLcom/google/gson/internal/sql/SqlTypesSupport;-><clinit>()V
-PLcom/google/gson/stream/JsonWriter;-><clinit>()V
-PLcom/google/gson/stream/JsonWriter;->endArray()V
-PLcom/google/gson/stream/JsonWriter;->endObject()V
-PLcom/google/gson/stream/JsonWriter;->newline()V
-PLcom/google/gson/stream/JsonWriter;->value(Z)V
-PLkotlin/collections/ArrayAsCollection;-><init>([Ljava/lang/Object;Z)V
-PLkotlin/collections/ArrayAsCollection;->toArray()[Ljava/lang/Object;
-PLkotlin/collections/CollectionsKt__CollectionsKt;->arrayListOf([Ljava/lang/Object;)Ljava/util/ArrayList;
-PLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V
-PLkotlin/io/CloseableKt;->closeFinally(Ljava/io/Closeable;Ljava/lang/Throwable;)V
-PLkotlin/jvm/internal/Ref$IntRef;-><init>()V
-PLkotlin/jvm/internal/TypeIntrinsics;->asMutableCollection(Ljava/util/LinkedHashSet;)Ljava/util/Collection;
-PLkotlin/sequences/SequenceBuilderIterator;-><init>()V
-PLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext;
-PLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z
-PLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object;
-PLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V
-PLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
-PLkotlin/sequences/SequenceScope;-><init>()V
-PLkotlin/text/Charsets;-><clinit>()V
-PLkotlinx/coroutines/CancellableContinuationImpl;->resumeUndispatched(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/Unit;)V
-PLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V
-PLkotlinx/coroutines/CompletedContinuation;->copy$default(Lkotlinx/coroutines/CompletedContinuation;Lkotlinx/coroutines/CancelHandler;Ljava/util/concurrent/CancellationException;I)Lkotlinx/coroutines/CompletedContinuation;
-PLkotlinx/coroutines/CoroutineDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
-PLkotlinx/coroutines/DefaultExecutor;->acknowledgeShutdownIfNeeded()V
-PLkotlinx/coroutines/DefaultExecutor;->getThread()Ljava/lang/Thread;
-PLkotlinx/coroutines/DefaultExecutor;->run()V
-PLkotlinx/coroutines/DelayKt;->delay(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/DisposeOnCancel;-><init>(Lkotlinx/coroutines/DisposableHandle;)V
-PLkotlinx/coroutines/DisposeOnCancel;->invoke(Ljava/lang/Throwable;)V
-PLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;-><init>(Lkotlinx/coroutines/EventLoopImplBase;JLkotlinx/coroutines/CancellableContinuationImpl;)V
-PLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;->run()V
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;-><init>(J)V
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->dispose()V
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->scheduleTask(JLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;Lkotlinx/coroutines/EventLoopImplBase;)I
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setHeap(Lkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;)V
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setIndex(I)V
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;-><init>(J)V
-PLkotlinx/coroutines/EventLoopImplBase;->access$isCompleted(Lkotlinx/coroutines/EventLoopImplBase;)Z
-PLkotlinx/coroutines/EventLoopImplBase;->enqueueImpl(Ljava/lang/Runnable;)Z
-PLkotlinx/coroutines/EventLoopImplBase;->isEmpty()Z
-PLkotlinx/coroutines/EventLoopImplBase;->processNextEvent()J
-PLkotlinx/coroutines/EventLoopImplBase;->schedule(JLkotlinx/coroutines/EventLoopImplBase$DelayedTask;)V
-PLkotlinx/coroutines/EventLoopImplBase;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuationImpl;)V
-PLkotlinx/coroutines/EventLoop_commonKt;-><clinit>()V
-PLkotlinx/coroutines/InvokeOnCompletion;->invoke(Ljava/lang/Throwable;)V
-PLkotlinx/coroutines/JobKt;->access$removeEntryAtIndex([Ljava/lang/Object;I)[Ljava/lang/Object;
-PLkotlinx/coroutines/JobSupport$Finishing;->isSealed()Z
-PLkotlinx/coroutines/JobSupport;->getChildJobCancellationCause()Ljava/util/concurrent/CancellationException;
-PLkotlinx/coroutines/JobSupport;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/JobSupport;->parentCancelled(Lkotlinx/coroutines/JobSupport;)V
-PLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V
-PLkotlinx/coroutines/flow/FlowKt__ContextKt;->checkArgument(Z)V
-PLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlin/coroutines/Continuation;
-PLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlin/coroutines/Continuation;
-PLkotlinx/coroutines/flow/internal/AbortFlowException;-><init>(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;)V
-PLkotlinx/coroutines/flow/internal/AbortFlowException;->fillInStackTrace()Ljava/lang/Throwable;
-PLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V
-PLkotlinx/coroutines/flow/internal/ChildCancelledException;-><init>()V
-PLkotlinx/coroutines/flow/internal/ChildCancelledException;->fillInStackTrace()Ljava/lang/Throwable;
-PLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;-><init>(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Throwable;)V
-PLkotlinx/coroutines/flow/internal/SafeCollector;->getContext()Lkotlin/coroutines/CoroutineContext;
-PLkotlinx/coroutines/flow/internal/SafeCollector;->releaseIntercepted()V
-PLkotlinx/coroutines/internal/ThreadSafeHeap;-><init>()V
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->addImpl(Lkotlinx/coroutines/EventLoopImplBase$DelayedTask;)V
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->isEmpty()Z
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->removeAtImpl(I)Lkotlinx/coroutines/internal/ThreadSafeHeapNode;
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->siftUpFrom(I)V
\ No newline at end of file
diff --git a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/ImmersiveList.kt b/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/ImmersiveList.kt
deleted file mode 100644
index a690908..0000000
--- a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/ImmersiveList.kt
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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.tv.integration.demos
-
-import android.util.Log
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.width
-import androidx.compose.runtime.Composable
-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.focus.onFocusChanged
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.unit.dp
-import androidx.tv.foundation.lazy.list.TvLazyColumn
-import androidx.tv.material3.ExperimentalTvMaterial3Api
-import androidx.tv.material3.ImmersiveList
-
-@Composable
-fun ImmersiveListContent() {
- TvLazyColumn(verticalArrangement = Arrangement.spacedBy(20.dp)) {
- items(3) { SampleLazyRow() }
- item { SampleImmersiveList() }
- items(3) { SampleLazyRow() }
- }
-}
-
-@OptIn(ExperimentalTvMaterial3Api::class)
-@Composable
-private fun SampleImmersiveList() {
- val immersiveListHeight = 300.dp
- val cardSpacing = 10.dp
- val cardWidth = 200.dp
- val cardHeight = 150.dp
- val backgrounds = listOf(
- Color.Red,
- Color.Blue,
- Color.Magenta,
- )
-
- ImmersiveList(
- modifier = Modifier
- .height(immersiveListHeight + cardHeight / 2)
- .fillMaxWidth(),
- background = { index, _ ->
- Box(
- modifier = Modifier
- .background(backgrounds[index].copy(alpha = 0.3f))
- .height(immersiveListHeight)
- .fillMaxWidth()
- )
- }
- ) {
- Row(horizontalArrangement = Arrangement.spacedBy(cardSpacing)) {
- backgrounds.forEachIndexed { index, backgroundColor ->
- var isFocused by remember { mutableStateOf(false) }
-
- Box(
- modifier = Modifier
- .background(backgroundColor)
- .width(cardWidth)
- .height(cardHeight)
- .border(5.dp, Color.White.copy(alpha = if (isFocused) 1f else 0.3f))
- .onFocusChanged { isFocused = it.isFocused }
- .immersiveListItem(index)
- .clickable {
- Log.d("ImmersiveList", "Item $index was clicked")
- }
- )
- }
- }
- }
-}
diff --git a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/SampleModalNavDrawer.kt b/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/SampleModalNavDrawer.kt
deleted file mode 100644
index e36b1df..0000000
--- a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/SampleModalNavDrawer.kt
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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.tv.integration.demos
-
-import androidx.compose.animation.AnimatedVisibility
-import androidx.compose.animation.core.tween
-import androidx.compose.animation.shrinkHorizontally
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.focusable
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxHeight
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.layout.width
-import androidx.compose.material3.Button
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.CompositionLocalProvider
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.LocalLayoutDirection
-import androidx.compose.ui.text.style.TextAlign
-import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.dp
-import androidx.tv.material3.DrawerValue
-import androidx.tv.material3.ExperimentalTvMaterial3Api
-import androidx.tv.material3.ModalNavigationDrawer
-
-@OptIn(ExperimentalTvMaterial3Api::class)
-@Composable
-fun SampleModalDrawer() {
- Row(Modifier.fillMaxSize()) {
- Box(modifier = Modifier
- .height(400.dp)
- .width(400.dp)
- .border(2.dp, Color.Magenta)) {
- ModalNavigationDrawer(drawerContent = drawerContent()) {
- Button(modifier = Modifier
- .height(100.dp)
- .fillMaxWidth(), onClick = {}) {
- Text("BUTTON")
- }
- }
- }
-
- CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
- Box(
- modifier = Modifier
- .height(400.dp)
- .width(400.dp)
- .border(2.dp, Color.Magenta)
- ) {
- ModalNavigationDrawer(drawerContent = drawerContent()) {
- Button(modifier = Modifier
- .height(100.dp)
- .fillMaxWidth(), onClick = {}) {
- Text("BUTTON")
- }
- }
- }
- }
- }
-}
-
-@Composable
-@OptIn(ExperimentalTvMaterial3Api::class)
-internal fun drawerContent(): @Composable (DrawerValue) -> Unit =
- {
- Column(Modifier.background(Color.Gray).fillMaxHeight()) {
- NavigationRow(it, Color.Red, "Red")
- NavigationRow(it, Color.Blue, "Blue")
- NavigationRow(it, Color.Yellow, "Yellow")
- }
- }
-
-@OptIn(ExperimentalTvMaterial3Api::class)
-@Composable
-private fun NavigationRow(drawerValue: DrawerValue, color: Color, text: String) {
- Row(Modifier.padding(10.dp).drawBorderOnFocus(width = 2.dp).focusable()) {
- Box(Modifier.size(50.dp).background(color).padding(end = 20.dp))
- AnimatedVisibility(
- drawerValue == DrawerValue.Open,
- // intentionally slow to test animation
- exit = shrinkHorizontally(tween(2000))
- ) {
- Text(
- text = text,
- softWrap = false,
- modifier = Modifier.padding(15.dp).width(50.dp),
- textAlign = TextAlign.Center
- )
- }
- }
-}
diff --git a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/SampleNavDrawer.kt b/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/SampleNavDrawer.kt
deleted file mode 100644
index cf1ed6a..0000000
--- a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/SampleNavDrawer.kt
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * 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.tv.integration.demos
-
-import androidx.compose.foundation.border
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.width
-import androidx.compose.material3.Button
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.CompositionLocalProvider
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.LocalLayoutDirection
-import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.dp
-import androidx.tv.material3.ExperimentalTvMaterial3Api
-import androidx.tv.material3.NavigationDrawer
-
-@OptIn(ExperimentalTvMaterial3Api::class)
-@Composable
-fun SampleDrawer() {
- Row(Modifier.fillMaxSize()) {
- Box(modifier = Modifier
- .height(400.dp)
- .width(400.dp)
- .border(2.dp, Color.Magenta)) {
- NavigationDrawer(drawerContent = drawerContent()) {
- Button(modifier = Modifier
- .height(100.dp)
- .fillMaxWidth(), onClick = {}) {
- Text("BUTTON")
- }
- }
- }
-
- CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
- Box(
- modifier = Modifier
- .height(400.dp)
- .width(400.dp)
- .border(2.dp, Color.Magenta)
- ) {
- NavigationDrawer(drawerContent = drawerContent()) {
- Button(modifier = Modifier
- .height(100.dp)
- .fillMaxWidth(), onClick = {}) {
- Text("BUTTON")
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/tv/integration-tests/demos/build.gradle b/tv/integration-tests/playground/build.gradle
similarity index 97%
rename from tv/integration-tests/demos/build.gradle
rename to tv/integration-tests/playground/build.gradle
index 31f15c1..3ea0172 100644
--- a/tv/integration-tests/demos/build.gradle
+++ b/tv/integration-tests/playground/build.gradle
@@ -57,7 +57,7 @@
signingConfig signingConfigs.debug
}
}
- namespace "androidx.tv.integration.demos"
+ namespace "androidx.tv.integration.playground"
}
// Workaround for https://github.com/gradle/gradle/issues/19882
diff --git a/tv/integration-tests/demos/src/main/AndroidManifest.xml b/tv/integration-tests/playground/src/main/AndroidManifest.xml
similarity index 97%
rename from tv/integration-tests/demos/src/main/AndroidManifest.xml
rename to tv/integration-tests/playground/src/main/AndroidManifest.xml
index 4c801cb..3a078f4 100644
--- a/tv/integration-tests/demos/src/main/AndroidManifest.xml
+++ b/tv/integration-tests/playground/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright 2022 The Android Open Source Project
+ 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.
diff --git a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/App.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/App.kt
similarity index 73%
rename from tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/App.kt
rename to tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/App.kt
index 00ea81e..20ad0ae 100644
--- a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/App.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/App.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,10 +14,12 @@
* limitations under the License.
*/
-package androidx.tv.integration.demos
+package androidx.tv.integration.playground
+import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@@ -25,22 +27,26 @@
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.darkColorScheme
+val pageColor = Color.Black
+
@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun App() {
var selectedTab by remember { mutableStateOf(Navigation.FeaturedCarousel) }
- MaterialTheme(
- colorScheme = darkColorScheme()
- ) {
+ MaterialTheme(colorScheme = darkColorScheme()) {
Column(
- modifier = Modifier.padding(20.dp),
- verticalArrangement = Arrangement.spacedBy(20.dp)
+ modifier = Modifier
+ .background(pageColor)
+ .fillMaxSize()
+ .padding(20.dp),
+ verticalArrangement = Arrangement.spacedBy(20.dp),
) {
TopNavigation(updateSelectedTab = { selectedTab = it })
selectedTab.action.invoke()
diff --git a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/Card.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/Card.kt
new file mode 100644
index 0000000..c517d99
--- /dev/null
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/Card.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.tv.integration.playground
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.focusable
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.width
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.dp
+
+@Composable
+fun Card(
+ modifier: Modifier = Modifier,
+ backgroundColor: Color = Color.Transparent,
+) {
+ Box(
+ modifier = modifier
+ .background(backgroundColor.copy(alpha = 0.3f))
+ .width(200.dp)
+ .height(150.dp)
+ .drawBorderOnFocus()
+ .focusable()
+ )
+}
\ No newline at end of file
diff --git a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/FeaturedCarousel.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FeaturedCarousel.kt
similarity index 76%
rename from tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/FeaturedCarousel.kt
rename to tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FeaturedCarousel.kt
index 6a5007f..64f92b9 100644
--- a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/FeaturedCarousel.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FeaturedCarousel.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package androidx.tv.integration.demos
+package androidx.tv.integration.playground
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.foundation.background
@@ -42,8 +42,8 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
+import androidx.tv.foundation.ExperimentalTvFoundationApi
import androidx.tv.material3.Carousel
import androidx.tv.material3.CarouselDefaults
import androidx.tv.material3.CarouselState
@@ -88,15 +88,9 @@
}
}
-@Composable
-fun Modifier.drawBorderOnFocus(borderColor: Color = Color.White, width: Dp = 5.dp): Modifier {
- var isFocused by remember { mutableStateOf(false) }
- return this
- .border(width, borderColor.copy(alpha = if (isFocused) 1f else 0.2f))
- .onFocusChanged { isFocused = it.isFocused }
-}
-
-@OptIn(ExperimentalTvMaterial3Api::class, ExperimentalAnimationApi::class)
+@OptIn(ExperimentalTvMaterial3Api::class, ExperimentalAnimationApi::class,
+ ExperimentalTvFoundationApi::class
+)
@Composable
internal fun FeaturedCarousel(modifier: Modifier = Modifier) {
val backgrounds = listOf(
@@ -111,35 +105,42 @@
)
val carouselState = remember { CarouselState() }
- Carousel(
- itemCount = backgrounds.size,
- carouselState = carouselState,
- modifier = modifier
- .height(300.dp)
- .fillMaxWidth(),
- carouselIndicator = {
- CarouselDefaults.IndicatorRow(
- itemCount = backgrounds.size,
- activeItemIndex = carouselState.activeItemIndex,
- modifier = Modifier
- .align(Alignment.BottomEnd)
- .padding(16.dp),
- )
- }
- ) { itemIndex ->
- CarouselItem(
- background = {
- Box(
+ FocusGroup {
+ Carousel(
+ itemCount = backgrounds.size,
+ carouselState = carouselState,
+ modifier = modifier
+ .height(300.dp)
+ .fillMaxWidth(),
+ carouselIndicator = {
+ CarouselDefaults.IndicatorRow(
+ itemCount = backgrounds.size,
+ activeItemIndex = carouselState.activeItemIndex,
modifier = Modifier
- .background(backgrounds[itemIndex])
- .fillMaxSize()
+ .align(Alignment.BottomEnd)
+ .padding(16.dp),
)
}
- ) {
- Box(modifier = Modifier) {
- OverlayButton(
- modifier = Modifier
- )
+ ) { itemIndex ->
+ CarouselItem(
+ background = {
+ Box(
+ modifier = Modifier
+ .background(backgrounds[itemIndex])
+ .fillMaxSize()
+ )
+ },
+ modifier =
+ if (itemIndex == 0)
+ Modifier.initiallyFocused()
+ else
+ Modifier.restorableFocus()
+ ) {
+ Box(modifier = Modifier) {
+ OverlayButton(
+ modifier = Modifier
+ )
+ }
}
}
}
diff --git a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FocusGroup.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FocusGroup.kt
new file mode 100644
index 0000000..98a9e38
--- /dev/null
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FocusGroup.kt
@@ -0,0 +1,183 @@
+/*
+ * 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.tv.integration.playground
+
+import android.annotation.SuppressLint
+import android.util.Log
+import androidx.compose.foundation.focusable
+import androidx.compose.foundation.layout.Box
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.DisposableEffect
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.currentCompositeKeyHash
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberUpdatedState
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.ui.ExperimentalComposeUiApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.focus.FocusDirection
+import androidx.compose.ui.focus.FocusRequester
+import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.focus.onFocusChanged
+import androidx.compose.ui.platform.LocalFocusManager
+import androidx.tv.foundation.ExperimentalTvFoundationApi
+
+/**
+ * Composable container that provides modifier extensions to allow focus to be restored to the
+ * element that was previously focused within the TvFocusGroup.
+ *
+ * @param modifier the modifier to apply to this group.
+ * @param content the content that is present within the group and can use focus-group modifier
+ * extensions.
+ */
+@OptIn(ExperimentalComposeUiApi::class)
+@ExperimentalTvFoundationApi
+@Composable
+fun FocusGroup(
+ modifier: Modifier = Modifier,
+ content: @Composable FocusGroupScope.() -> Unit
+) {
+ val focusManager = LocalFocusManager.current
+ val focusGroupKeyHash = currentCompositeKeyHash
+
+ // TODO: Is this the intended way to call rememberSaveable
+ // with key set to parentHash?
+ val previousFocusedItemHash: MutableState<Int?> = rememberSaveable(
+ key = focusGroupKeyHash.toString()
+ ) {
+ mutableStateOf(null)
+ }
+
+ val state = FocusGroupState(previousFocusedItemHash = previousFocusedItemHash)
+
+ Box(
+ modifier = modifier
+ .onFocusChanged {
+ if (it.isFocused) {
+ if (state.noRecordedState()) {
+ focusManager.moveFocus(FocusDirection.Enter)
+ } else {
+ if (state.focusRequester != FocusRequester.Default) {
+ try {
+ state.focusRequester.requestFocus()
+ } catch (e: Exception) {
+ Log.w("TvFocusGroup", "TvFocusGroup: Failed to request focus", e)
+ }
+ } else {
+ focusManager.moveFocus(FocusDirection.Enter)
+ }
+ }
+ }
+ }
+ .focusable(),
+ content = { FocusGroupScope(state).content() }
+ )
+}
+
+/**
+ * Scope containing the modifier extensions to be used within [FocusGroup].
+ */
+@ExperimentalTvFoundationApi
+class FocusGroupScope internal constructor(private val state: FocusGroupState) {
+ private var currentFocusableIdIndex = 0
+
+ private fun generateUniqueFocusableId(): Int = currentFocusableIdIndex++
+
+ /**
+ * Modifier that records if the item was in focus before it moved out of the group. When focus
+ * enters the [FocusGroup], the item will be returned focus.
+ */
+ @SuppressLint("ComposableModifierFactory")
+ @Composable
+ fun Modifier.restorableFocus(): Modifier =
+ this.restorableFocus(focusId = rememberSaveable { generateUniqueFocusableId() })
+
+ /**
+ * Modifier that marks the current composable as the item to gain focus initially when focus
+ * enters the [FocusGroup]. When focus enters the [FocusGroup], the item will be returned focus.
+ */
+ @SuppressLint("ComposableModifierFactory")
+ @Composable
+ fun Modifier.initiallyFocused(): Modifier {
+ val focusId = rememberSaveable { generateUniqueFocusableId() }
+ if (state.noRecordedState()) {
+ state.recordFocusedItemHash(focusId)
+ }
+ return this.restorableFocus(focusId)
+ }
+
+ @SuppressLint("ComposableModifierFactory")
+ @OptIn(ExperimentalComposeUiApi::class)
+ @Composable
+ private fun Modifier.restorableFocus(focusId: Int): Modifier {
+ val focusRequester = remember { FocusRequester() }
+ var isFocused = remember { false }
+ val isCurrentlyFocused by rememberUpdatedState(isFocused)
+ val focusManager = LocalFocusManager.current
+ state.associatedWith(focusId, focusRequester)
+ DisposableEffect(Unit) {
+ onDispose {
+ state.clearDisposedFocusRequester(focusId)
+ if (isCurrentlyFocused) {
+ focusManager.moveFocus(FocusDirection.Exit)
+ focusManager.moveFocus(FocusDirection.Enter)
+ }
+ }
+ }
+
+ return this
+ .focusRequester(focusRequester)
+ .onFocusChanged {
+ isFocused = it.isFocused || it.hasFocus
+ if (isFocused) {
+ state.recordFocusedItemHash(focusId)
+ state.associatedWith(focusId, focusRequester)
+ }
+ }
+ }
+}
+
+@Stable
+@ExperimentalTvFoundationApi
+internal class FocusGroupState(
+ private var previousFocusedItemHash: MutableState<Int?>
+) {
+ internal var focusRequester: FocusRequester = FocusRequester.Default
+ private set
+
+ internal fun recordFocusedItemHash(itemHash: Int) {
+ previousFocusedItemHash.value = itemHash
+ }
+
+ internal fun clearDisposedFocusRequester(itemHash: Int) {
+ if (previousFocusedItemHash.value == itemHash) {
+ focusRequester = FocusRequester.Default
+ }
+ }
+
+ internal fun associatedWith(itemHash: Int, focusRequester: FocusRequester) {
+ if (previousFocusedItemHash.value == itemHash) {
+ this.focusRequester = focusRequester
+ }
+ }
+
+ internal fun noRecordedState(): Boolean =
+ previousFocusedItemHash.value == null && focusRequester == FocusRequester.Default
+}
diff --git a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/ImmersiveList.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/ImmersiveList.kt
new file mode 100644
index 0000000..b8ed37f
--- /dev/null
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/ImmersiveList.kt
@@ -0,0 +1,105 @@
+/*
+ * 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.tv.integration.playground
+
+import android.util.Log
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.width
+import androidx.compose.runtime.Composable
+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.focus.onFocusChanged
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.dp
+import androidx.tv.foundation.ExperimentalTvFoundationApi
+import androidx.tv.foundation.lazy.list.TvLazyColumn
+import androidx.tv.material3.ExperimentalTvMaterial3Api
+import androidx.tv.material3.ImmersiveList
+
+@Composable
+fun ImmersiveListContent() {
+ TvLazyColumn(verticalArrangement = Arrangement.spacedBy(20.dp)) {
+ items(3) { SampleLazyRow() }
+ item { SampleImmersiveList() }
+ items(3) { SampleLazyRow() }
+ }
+}
+
+@OptIn(ExperimentalTvMaterial3Api::class, ExperimentalTvFoundationApi::class)
+@Composable
+private fun SampleImmersiveList() {
+ val immersiveListHeight = 300.dp
+ val cardSpacing = 10.dp
+ val cardWidth = 200.dp
+ val cardHeight = 150.dp
+ val backgrounds = listOf(
+ Color.Red,
+ Color.Blue,
+ Color.Magenta,
+ )
+
+ FocusGroup {
+ ImmersiveList(
+ modifier = Modifier
+ .height(immersiveListHeight + cardHeight / 2)
+ .fillMaxWidth(),
+ background = { index, _ ->
+ Box(
+ modifier = Modifier
+ .background(backgrounds[index].copy(alpha = 0.3f))
+ .height(immersiveListHeight)
+ .fillMaxWidth()
+ )
+ }
+ ) {
+ Row(horizontalArrangement = Arrangement.spacedBy(cardSpacing)) {
+ backgrounds.forEachIndexed { index, backgroundColor ->
+ var isFocused by remember { mutableStateOf(false) }
+
+ Box(
+ modifier = Modifier
+ .background(backgroundColor)
+ .width(cardWidth)
+ .height(cardHeight)
+ .border(5.dp, Color.White.copy(alpha = if (isFocused) 1f else 0.3f))
+ .then(
+ if (index == 0)
+ Modifier.initiallyFocused()
+ else
+ Modifier.restorableFocus()
+ )
+ .onFocusChanged { isFocused = it.isFocused }
+ .immersiveListItem(index)
+ .clickable {
+ Log.d("ImmersiveList", "Item $index was clicked")
+ }
+ )
+ }
+ }
+ }
+ }
+}
diff --git a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/LazyRowsAndColumns.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/LazyRowsAndColumns.kt
similarity index 63%
rename from tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/LazyRowsAndColumns.kt
rename to tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/LazyRowsAndColumns.kt
index 72f62aa..29b1866 100644
--- a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/LazyRowsAndColumns.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/LazyRowsAndColumns.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,18 +14,14 @@
* limitations under the License.
*/
-package androidx.tv.integration.demos
+package androidx.tv.integration.playground
-import androidx.compose.foundation.background
-import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
+import androidx.tv.foundation.ExperimentalTvFoundationApi
import androidx.tv.foundation.lazy.list.TvLazyColumn
import androidx.tv.foundation.lazy.list.TvLazyRow
@@ -39,22 +35,25 @@
}
}
+@OptIn(ExperimentalTvFoundationApi::class)
@Composable
fun SampleLazyRow() {
val colors = listOf(Color.Red, Color.Magenta, Color.Green, Color.Yellow, Color.Blue, Color.Cyan)
val backgroundColors = List(columnsCount) { colors.random() }
- TvLazyRow(horizontalArrangement = Arrangement.spacedBy(10.dp)) {
- backgroundColors.forEach { backgroundColor ->
- item {
- Box(
- modifier = Modifier
- .background(backgroundColor.copy(alpha = 0.3f))
- .width(200.dp)
- .height(150.dp)
- .drawBorderOnFocus()
- .focusable()
- )
+ FocusGroup {
+ TvLazyRow(horizontalArrangement = Arrangement.spacedBy(10.dp)) {
+ backgroundColors.forEachIndexed { index, backgroundColor ->
+ item {
+ Card(
+ backgroundColor = backgroundColor,
+ modifier =
+ if (index == 0)
+ Modifier.initiallyFocused()
+ else
+ Modifier.restorableFocus()
+ )
+ }
}
}
}
diff --git a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/MainActivity.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/MainActivity.kt
similarity index 90%
rename from tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/MainActivity.kt
rename to tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/MainActivity.kt
index fd0f6da..1c8fc89 100644
--- a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/MainActivity.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/MainActivity.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package androidx.tv.integration.demos
+package androidx.tv.integration.playground
import android.os.Bundle
import androidx.activity.ComponentActivity
diff --git a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/NavigationDrawer.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/NavigationDrawer.kt
new file mode 100644
index 0000000..cbdffe8
--- /dev/null
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/NavigationDrawer.kt
@@ -0,0 +1,209 @@
+/*
+ * 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.tv.integration.playground
+
+import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.foundation.background
+import androidx.compose.foundation.focusable
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.KeyboardArrowLeft
+import androidx.compose.material.icons.filled.KeyboardArrowRight
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.focus.onFocusChanged
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.platform.LocalLayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.zIndex
+import androidx.tv.foundation.ExperimentalTvFoundationApi
+import androidx.tv.material3.DrawerValue
+import androidx.tv.material3.ExperimentalTvMaterial3Api
+import androidx.tv.material3.Icon
+import androidx.tv.material3.NavigationDrawer
+import androidx.tv.material3.Text
+
+@OptIn(ExperimentalTvMaterial3Api::class)
+@Composable
+fun StandardNavigationDrawer() {
+ val direction = remember { mutableStateOf(LayoutDirection.Ltr) }
+
+ CompositionLocalProvider(LocalLayoutDirection provides direction.value) {
+ Row(Modifier.fillMaxSize()) {
+ Box(modifier = Modifier.height(400.dp)) {
+ NavigationDrawer(
+ drawerContent = { drawerValue ->
+ Sidebar(
+ drawerValue = drawerValue,
+ direction = direction,
+ )
+ }
+ ) {
+ CommonBackground()
+ }
+ }
+ }
+ }
+}
+
+@OptIn(ExperimentalTvMaterial3Api::class)
+@Composable
+fun ModalNavigationDrawer() {
+ val direction = remember { mutableStateOf(LayoutDirection.Ltr) }
+
+ CompositionLocalProvider(LocalLayoutDirection provides direction.value) {
+ Row(Modifier.fillMaxSize()) {
+ Box(modifier = Modifier.height(400.dp)) {
+ androidx.tv.material3.ModalNavigationDrawer(
+ drawerContent = { drawerValue ->
+ Sidebar(
+ drawerValue = drawerValue,
+ direction = direction,
+ )
+ }
+ ) {
+ CommonBackground()
+ }
+ }
+ }
+ }
+}
+
+@Composable
+private fun CommonBackground() {
+ Row(modifier = Modifier.padding(start = 10.dp)) {
+ Card(backgroundColor = Color.Red)
+ }
+}
+
+@OptIn(ExperimentalTvMaterial3Api::class, ExperimentalTvFoundationApi::class)
+@Composable
+private fun Sidebar(
+ drawerValue: DrawerValue,
+ direction: MutableState<LayoutDirection>,
+) {
+ val selectedIndex = remember { mutableStateOf(0) }
+
+ LaunchedEffect(selectedIndex.value) {
+ direction.value = when (selectedIndex.value) {
+ 0 -> LayoutDirection.Ltr
+ else -> LayoutDirection.Rtl
+ }
+ }
+
+ FocusGroup {
+ Column(
+ modifier = Modifier
+ .fillMaxHeight()
+ .background(pageColor)
+ .focusable(false),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ NavigationItem(
+ imageVector = Icons.Default.KeyboardArrowRight,
+ text = "LTR",
+ drawerValue = drawerValue,
+ selectedIndex = selectedIndex,
+ index = 0,
+ modifier = Modifier.initiallyFocused(),
+ )
+ NavigationItem(
+ imageVector = Icons.Default.KeyboardArrowLeft,
+ text = "RTL",
+ drawerValue = drawerValue,
+ selectedIndex = selectedIndex,
+ index = 1,
+ modifier = Modifier.restorableFocus(),
+ )
+ }
+ }
+}
+
+@OptIn(ExperimentalTvMaterial3Api::class)
+@Composable
+private fun NavigationItem(
+ imageVector: ImageVector,
+ text: String,
+ drawerValue: DrawerValue,
+ selectedIndex: MutableState<Int>,
+ index: Int,
+ modifier: Modifier = Modifier,
+) {
+ var isFocused by remember { mutableStateOf(false) }
+
+ Button(
+ onClick = { selectedIndex.value = index },
+ modifier = modifier
+ .onFocusChanged { isFocused = it.isFocused },
+ colors = ButtonDefaults.filledTonalButtonColors(
+ containerColor = if (isFocused) Color.White else Color.Transparent,
+ )
+ ) {
+ Box(modifier = Modifier) {
+ Row(
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.spacedBy(5.dp),
+ ) {
+ Icon(
+ imageVector = imageVector,
+ tint = if (isFocused) pageColor else Color.White,
+ contentDescription = null,
+ )
+ AnimatedVisibility(visible = drawerValue == DrawerValue.Open) {
+ Text(
+ text = text,
+ modifier = Modifier,
+ softWrap = false,
+ color = if (isFocused) pageColor else Color.White,
+ )
+ }
+ }
+ if (selectedIndex.value == index) {
+ Box(
+ modifier = Modifier
+ .width(10.dp)
+ .height(3.dp)
+ .offset(y = 5.dp)
+ .align(Alignment.BottomCenter)
+ .background(Color.Red)
+ .zIndex(10f)
+ )
+ }
+ }
+ }
+}
diff --git a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/StickyHeader.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/StickyHeader.kt
similarity index 97%
rename from tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/StickyHeader.kt
rename to tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/StickyHeader.kt
index 1b58b32..f1af42e 100644
--- a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/StickyHeader.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/StickyHeader.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package androidx.tv.integration.demos
+package androidx.tv.integration.playground
import androidx.compose.foundation.background
import androidx.compose.foundation.border
diff --git a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/TextField.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TextField.kt
similarity index 98%
rename from tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/TextField.kt
rename to tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TextField.kt
index ff5793b..4a55634 100644
--- a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/TextField.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TextField.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package androidx.tv.integration.demos
+package androidx.tv.integration.playground
import androidx.compose.foundation.background
import androidx.compose.foundation.focusable
diff --git a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/TopNavigation.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TopNavigation.kt
similarity index 70%
rename from tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/TopNavigation.kt
rename to tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TopNavigation.kt
index 95a6f7e..30b8f83 100644
--- a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/TopNavigation.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TopNavigation.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,11 +14,9 @@
* limitations under the License.
*/
-package androidx.tv.integration.demos
+package androidx.tv.integration.playground
-import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@@ -28,6 +26,7 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
+import androidx.tv.foundation.ExperimentalTvFoundationApi
import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Tab
import androidx.tv.material3.TabRow
@@ -35,13 +34,13 @@
import kotlinx.coroutines.delay
enum class Navigation(val displayName: String, val action: @Composable () -> Unit) {
- Drawer("Drawer", { SampleDrawer() }),
- ModalDrawer("Modal Drawer", { SampleModalDrawer() }),
+ StandardNavigationDrawer("Standard Navigation Drawer", { StandardNavigationDrawer() }),
+ ModalNavigationDrawer("Modal Navigation Drawer", { ModalNavigationDrawer() }),
LazyRowsAndColumns("Lazy Rows and Columns", { LazyRowsAndColumns() }),
FeaturedCarousel("Featured Carousel", { FeaturedCarouselContent() }),
ImmersiveList("Immersive List", { ImmersiveListContent() }),
- StickyHeader("Sticky Header", { StickyHeaderContent() }),
TextField("Text Field", { TextFieldContent() }),
+ StickyHeader("Sticky Header", { StickyHeaderContent() }),
}
@Composable
@@ -69,27 +68,31 @@
/**
* Pill indicator tab row for reference
*/
-@OptIn(ExperimentalTvMaterial3Api::class)
+@OptIn(ExperimentalTvMaterial3Api::class, ExperimentalTvFoundationApi::class)
@Composable
fun PillIndicatorTabRow(
tabs: List<String>,
selectedTabIndex: Int,
updateSelectedTab: (Int) -> Unit
) {
- TabRow(
- selectedTabIndex = selectedTabIndex,
- separator = { Spacer(modifier = Modifier.width(12.dp)) },
- ) {
- tabs.forEachIndexed { index, tab ->
- Tab(
- selected = index == selectedTabIndex,
- onFocus = { updateSelectedTab(index) },
- ) {
- Text(
- text = tab,
- fontSize = 12.sp,
- modifier = Modifier.padding(horizontal = 16.dp, vertical = 6.dp)
- )
+ FocusGroup {
+ TabRow(selectedTabIndex = selectedTabIndex) {
+ tabs.forEachIndexed { index, tab ->
+ Tab(
+ selected = index == selectedTabIndex,
+ onFocus = { updateSelectedTab(index) },
+ modifier =
+ if (tab == Navigation.StandardNavigationDrawer.displayName)
+ Modifier.initiallyFocused()
+ else
+ Modifier.restorableFocus()
+ ) {
+ Text(
+ text = tab,
+ fontSize = 12.sp,
+ modifier = Modifier.padding(horizontal = 16.dp, vertical = 6.dp)
+ )
+ }
}
}
}
diff --git a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/drawBorderOnFocus.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/drawBorderOnFocus.kt
new file mode 100644
index 0000000..fff347e
--- /dev/null
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/drawBorderOnFocus.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.tv.integration.playground
+
+import androidx.compose.foundation.border
+import androidx.compose.runtime.Composable
+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.focus.onFocusChanged
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+
+@Composable
+fun Modifier.drawBorderOnFocus(borderColor: Color = Color.White, width: Dp = 5.dp): Modifier {
+ var isFocused by remember { mutableStateOf(false) }
+ return this
+ .border(width, borderColor.copy(alpha = if (isFocused) 1f else 0.2f))
+ .onFocusChanged { isFocused = it.isFocused }
+}
diff --git a/tv/integration-tests/demos/src/main/res/drawable/app_icon_your_company.png b/tv/integration-tests/playground/src/main/res/drawable/app_icon_your_company.png
similarity index 100%
rename from tv/integration-tests/demos/src/main/res/drawable/app_icon_your_company.png
rename to tv/integration-tests/playground/src/main/res/drawable/app_icon_your_company.png
Binary files differ
diff --git a/tv/integration-tests/demos/src/main/res/layout/activity_main.xml b/tv/integration-tests/playground/src/main/res/layout/activity_main.xml
similarity index 100%
rename from tv/integration-tests/demos/src/main/res/layout/activity_main.xml
rename to tv/integration-tests/playground/src/main/res/layout/activity_main.xml
diff --git a/tv/integration-tests/demos/src/main/res/mipmap-hdpi/ic_launcher.webp b/tv/integration-tests/playground/src/main/res/mipmap-hdpi/ic_launcher.webp
similarity index 100%
rename from tv/integration-tests/demos/src/main/res/mipmap-hdpi/ic_launcher.webp
rename to tv/integration-tests/playground/src/main/res/mipmap-hdpi/ic_launcher.webp
Binary files differ
diff --git a/tv/integration-tests/demos/src/main/res/mipmap-mdpi/ic_launcher.webp b/tv/integration-tests/playground/src/main/res/mipmap-mdpi/ic_launcher.webp
similarity index 100%
rename from tv/integration-tests/demos/src/main/res/mipmap-mdpi/ic_launcher.webp
rename to tv/integration-tests/playground/src/main/res/mipmap-mdpi/ic_launcher.webp
Binary files differ
diff --git a/tv/integration-tests/demos/src/main/res/mipmap-xhdpi/ic_launcher.webp b/tv/integration-tests/playground/src/main/res/mipmap-xhdpi/ic_launcher.webp
similarity index 100%
rename from tv/integration-tests/demos/src/main/res/mipmap-xhdpi/ic_launcher.webp
rename to tv/integration-tests/playground/src/main/res/mipmap-xhdpi/ic_launcher.webp
Binary files differ
diff --git a/tv/integration-tests/demos/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/tv/integration-tests/playground/src/main/res/mipmap-xxhdpi/ic_launcher.webp
similarity index 100%
rename from tv/integration-tests/demos/src/main/res/mipmap-xxhdpi/ic_launcher.webp
rename to tv/integration-tests/playground/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Binary files differ
diff --git a/tv/integration-tests/demos/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/tv/integration-tests/playground/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
similarity index 100%
rename from tv/integration-tests/demos/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
rename to tv/integration-tests/playground/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Binary files differ
diff --git a/tv/integration-tests/demos/src/main/res/values/colors.xml b/tv/integration-tests/playground/src/main/res/values/colors.xml
similarity index 100%
rename from tv/integration-tests/demos/src/main/res/values/colors.xml
rename to tv/integration-tests/playground/src/main/res/values/colors.xml
diff --git a/tv/integration-tests/demos/src/main/res/values/strings.xml b/tv/integration-tests/playground/src/main/res/values/strings.xml
similarity index 87%
rename from tv/integration-tests/demos/src/main/res/values/strings.xml
rename to tv/integration-tests/playground/src/main/res/values/strings.xml
index 2d22ec3..5beced7 100644
--- a/tv/integration-tests/demos/src/main/res/values/strings.xml
+++ b/tv/integration-tests/playground/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
<!--
- Copyright 2022 The Android Open Source Project
+ 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.
@@ -15,8 +15,8 @@
-->
<resources>
- <string name="app_name">Samples</string>
- <string name="browse_title">Videos by Your Company</string>
+ <string name="app_name">DevX Playground</string>
+ <string name="browse_title">Playground app of DevX engineers</string>
<string name="related_movies">Related Videos</string>
<string name="grid_view">Grid View</string>
<string name="error_fragment">Error Fragment</string>
diff --git a/tv/integration-tests/demos/src/main/res/values/themes.xml b/tv/integration-tests/playground/src/main/res/values/themes.xml
similarity index 92%
rename from tv/integration-tests/demos/src/main/res/values/themes.xml
rename to tv/integration-tests/playground/src/main/res/values/themes.xml
index 402d3ea..8df2c77 100644
--- a/tv/integration-tests/demos/src/main/res/values/themes.xml
+++ b/tv/integration-tests/playground/src/main/res/values/themes.xml
@@ -1,5 +1,5 @@
<!--
- Copyright 2022 The Android Open Source Project
+ 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.
diff --git a/tv/integration-tests/demos/build.gradle b/tv/integration-tests/presentation/build.gradle
similarity index 97%
copy from tv/integration-tests/demos/build.gradle
copy to tv/integration-tests/presentation/build.gradle
index 31f15c1..b712865 100644
--- a/tv/integration-tests/demos/build.gradle
+++ b/tv/integration-tests/presentation/build.gradle
@@ -57,7 +57,7 @@
signingConfig signingConfigs.debug
}
}
- namespace "androidx.tv.integration.demos"
+ namespace "androidx.tv.integration.presentation"
}
// Workaround for https://github.com/gradle/gradle/issues/19882
diff --git a/tv/integration-tests/demos/src/main/AndroidManifest.xml b/tv/integration-tests/presentation/src/main/AndroidManifest.xml
similarity index 97%
copy from tv/integration-tests/demos/src/main/AndroidManifest.xml
copy to tv/integration-tests/presentation/src/main/AndroidManifest.xml
index 4c801cb..3a078f4 100644
--- a/tv/integration-tests/demos/src/main/AndroidManifest.xml
+++ b/tv/integration-tests/presentation/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright 2022 The Android Open Source Project
+ 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.
diff --git a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/MainActivity.kt b/tv/integration-tests/presentation/src/main/java/androidx/tv/integration/presentation/MainActivity.kt
similarity index 83%
copy from tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/MainActivity.kt
copy to tv/integration-tests/presentation/src/main/java/androidx/tv/integration/presentation/MainActivity.kt
index fd0f6da..6306306 100644
--- a/tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/MainActivity.kt
+++ b/tv/integration-tests/presentation/src/main/java/androidx/tv/integration/presentation/MainActivity.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,17 +14,18 @@
* limitations under the License.
*/
-package androidx.tv.integration.demos
+package androidx.tv.integration.presentation
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
+import androidx.compose.foundation.text.BasicText
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
- App()
+ BasicText("Hi")
}
}
}
\ No newline at end of file
diff --git a/tv/integration-tests/demos/src/main/res/drawable/app_icon_your_company.png b/tv/integration-tests/presentation/src/main/res/drawable/app_icon_your_company.png
similarity index 100%
copy from tv/integration-tests/demos/src/main/res/drawable/app_icon_your_company.png
copy to tv/integration-tests/presentation/src/main/res/drawable/app_icon_your_company.png
Binary files differ
diff --git a/tv/integration-tests/demos/src/main/res/layout/activity_main.xml b/tv/integration-tests/presentation/src/main/res/layout/activity_main.xml
similarity index 100%
copy from tv/integration-tests/demos/src/main/res/layout/activity_main.xml
copy to tv/integration-tests/presentation/src/main/res/layout/activity_main.xml
diff --git a/tv/integration-tests/demos/src/main/res/mipmap-hdpi/ic_launcher.webp b/tv/integration-tests/presentation/src/main/res/mipmap-hdpi/ic_launcher.webp
similarity index 100%
copy from tv/integration-tests/demos/src/main/res/mipmap-hdpi/ic_launcher.webp
copy to tv/integration-tests/presentation/src/main/res/mipmap-hdpi/ic_launcher.webp
Binary files differ
diff --git a/tv/integration-tests/demos/src/main/res/mipmap-mdpi/ic_launcher.webp b/tv/integration-tests/presentation/src/main/res/mipmap-mdpi/ic_launcher.webp
similarity index 100%
copy from tv/integration-tests/demos/src/main/res/mipmap-mdpi/ic_launcher.webp
copy to tv/integration-tests/presentation/src/main/res/mipmap-mdpi/ic_launcher.webp
Binary files differ
diff --git a/tv/integration-tests/demos/src/main/res/mipmap-xhdpi/ic_launcher.webp b/tv/integration-tests/presentation/src/main/res/mipmap-xhdpi/ic_launcher.webp
similarity index 100%
copy from tv/integration-tests/demos/src/main/res/mipmap-xhdpi/ic_launcher.webp
copy to tv/integration-tests/presentation/src/main/res/mipmap-xhdpi/ic_launcher.webp
Binary files differ
diff --git a/tv/integration-tests/demos/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/tv/integration-tests/presentation/src/main/res/mipmap-xxhdpi/ic_launcher.webp
similarity index 100%
copy from tv/integration-tests/demos/src/main/res/mipmap-xxhdpi/ic_launcher.webp
copy to tv/integration-tests/presentation/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Binary files differ
diff --git a/tv/integration-tests/demos/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/tv/integration-tests/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
similarity index 100%
copy from tv/integration-tests/demos/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
copy to tv/integration-tests/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Binary files differ
diff --git a/tv/integration-tests/demos/src/main/res/values/colors.xml b/tv/integration-tests/presentation/src/main/res/values/colors.xml
similarity index 100%
copy from tv/integration-tests/demos/src/main/res/values/colors.xml
copy to tv/integration-tests/presentation/src/main/res/values/colors.xml
diff --git a/tv/integration-tests/demos/src/main/res/values/strings.xml b/tv/integration-tests/presentation/src/main/res/values/strings.xml
similarity index 87%
copy from tv/integration-tests/demos/src/main/res/values/strings.xml
copy to tv/integration-tests/presentation/src/main/res/values/strings.xml
index 2d22ec3..38b8b29 100644
--- a/tv/integration-tests/demos/src/main/res/values/strings.xml
+++ b/tv/integration-tests/presentation/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
<!--
- Copyright 2022 The Android Open Source Project
+ 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.
@@ -15,8 +15,8 @@
-->
<resources>
- <string name="app_name">Samples</string>
- <string name="browse_title">Videos by Your Company</string>
+ <string name="app_name">Presentation app</string>
+ <string name="browse_title">Presentation app for visitors</string>
<string name="related_movies">Related Videos</string>
<string name="grid_view">Grid View</string>
<string name="error_fragment">Error Fragment</string>
diff --git a/tv/integration-tests/demos/src/main/res/values/themes.xml b/tv/integration-tests/presentation/src/main/res/values/themes.xml
similarity index 92%
copy from tv/integration-tests/demos/src/main/res/values/themes.xml
copy to tv/integration-tests/presentation/src/main/res/values/themes.xml
index 402d3ea..8df2c77 100644
--- a/tv/integration-tests/demos/src/main/res/values/themes.xml
+++ b/tv/integration-tests/presentation/src/main/res/values/themes.xml
@@ -1,5 +1,5 @@
<!--
- Copyright 2022 The Android Open Source Project
+ 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.
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/TabRow.kt b/tv/tv-material/src/main/java/androidx/tv/material3/TabRow.kt
index a1af7e7..1b49193 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/TabRow.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/TabRow.kt
@@ -170,7 +170,7 @@
/** Space between tabs in the tab row */
@Composable
fun TabSeparator() {
- Spacer(modifier = Modifier.width(20.dp))
+ Spacer(modifier = Modifier.width(8.dp))
}
/** Default accent color for the TabRow */
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java
index 59fc2f9..3800b46 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java
@@ -746,8 +746,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public Modifiers getModifiers() {
@@ -912,7 +912,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull Modifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -1238,8 +1240,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public Modifiers getModifiers() {
@@ -1359,7 +1361,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull Modifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -1452,8 +1456,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public Modifiers getModifiers() {
@@ -1588,7 +1592,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull Modifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -1693,8 +1699,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public Modifiers getModifiers() {
@@ -1822,7 +1828,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull Modifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -1877,8 +1885,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public SpanModifiers getModifiers() {
@@ -1958,7 +1966,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull SpanModifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -2025,8 +2035,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public SpanModifiers getModifiers() {
@@ -2121,7 +2131,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull SpanModifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -2229,8 +2241,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public Modifiers getModifiers() {
@@ -2343,7 +2355,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull Modifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -2530,8 +2544,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public Modifiers getModifiers() {
@@ -2636,7 +2650,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull Modifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -2726,8 +2742,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public Modifiers getModifiers() {
@@ -2828,7 +2844,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull Modifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -2931,8 +2949,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public Modifiers getModifiers() {
@@ -3080,7 +3098,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull Modifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -3137,8 +3157,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public ArcModifiers getModifiers() {
@@ -3219,7 +3239,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull ArcModifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -3298,8 +3320,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public ArcModifiers getModifiers() {
@@ -3407,7 +3429,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull ArcModifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -3467,8 +3491,8 @@
}
/**
- * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
- * for testing purposes only.
+ * Gets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ * Intended for testing purposes only.
*/
@Nullable
public ArcModifiers getModifiers() {
@@ -3529,7 +3553,9 @@
return this;
}
- /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
+ /**
+ * Sets {@link androidx.wear.protolayout.ModifiersBuilders.Modifiers} for this element.
+ */
@NonNull
public Builder setModifiers(@NonNull ArcModifiers modifiers) {
mImpl.setModifiers(modifiers.toProto());
@@ -3925,32 +3951,34 @@
public static final int TEXT_ALIGN_UNDEFINED = 0;
/**
- * Align to the "start" of the {@link androidx.wear.tiles.LayoutElementBuilders.Text} element
- * (left in LTR layouts, right in RTL layouts).
+ * Align to the "start" of the {@link androidx.wear.protolayout.LayoutElementBuilders.Text}
+ * element (left in LTR layouts, right in RTL layouts).
*/
public static final int TEXT_ALIGN_START = 1;
/**
- * Align to the center of the {@link androidx.wear.tiles.LayoutElementBuilders.Text} element.
+ * Align to the center of the {@link androidx.wear.protolayout.LayoutElementBuilders.Text}
+ * element.
*/
public static final int TEXT_ALIGN_CENTER = 2;
/**
- * Align to the "end" of the {@link androidx.wear.tiles.LayoutElementBuilders.Text} element
- * (right in LTR layouts, left in RTL layouts).
+ * Align to the "end" of the {@link androidx.wear.protolayout.LayoutElementBuilders.Text}
+ * element (right in LTR layouts, left in RTL layouts).
*/
public static final int TEXT_ALIGN_END = 3;
/**
- * The anchor position of an {@link androidx.wear.tiles.LayoutElementBuilders.Arc}'s elements.
- * This is used to specify how elements added to an {@link
- * androidx.wear.tiles.LayoutElementBuilders.Arc} should be laid out with respect to
+ * The anchor position of an {@link androidx.wear.protolayout.LayoutElementBuilders.Arc}'s
+ * elements. This is used to specify how elements added to an {@link
+ * androidx.wear.protolayout.LayoutElementBuilders.Arc} should be laid out with respect to
* anchor_angle.
*
* <p>As an example, assume that the following diagrams are wrapped to an arc, and each
- * represents an {@link androidx.wear.tiles.LayoutElementBuilders.Arc} element containing a
- * single {@link androidx.wear.tiles.LayoutElementBuilders.Text} element. The {@link
- * androidx.wear.tiles.LayoutElementBuilders.Text} element's anchor_angle is "0" for all cases.
+ * represents an {@link androidx.wear.protolayout.LayoutElementBuilders.Arc} element containing
+ * a single {@link androidx.wear.protolayout.LayoutElementBuilders.Text} element. The {@link
+ * androidx.wear.protolayout.LayoutElementBuilders.Text} element's anchor_angle is "0" for all
+ * cases.
*
* <pre>{@code
* ARC_ANCHOR_START:
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ModifiersBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ModifiersBuilders.java
index 4a65eeb..adb3aaa 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ModifiersBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ModifiersBuilders.java
@@ -663,9 +663,8 @@
/**
* Sets the color of the border.
*
- * <p>
- * This field is made bindable and will use the dynamic value (if set) from version 1.2
- * Older renderers will still consider this field as non-bindable and will use the
+ * <p>This field is made bindable and will use the dynamic value (if set) from version
+ * 1.2 Older renderers will still consider this field as non-bindable and will use the
* static value.
*/
@NonNull
@@ -684,7 +683,7 @@
}
}
- /** The corner of a {@link androidx.wear.tiles.LayoutElementBuilders.Box} element. */
+ /** The corner of a {@link androidx.wear.protolayout.LayoutElementBuilders.Box} element. */
public static final class Corner {
private final ModifiersProto.Corner mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -810,10 +809,10 @@
/**
* Sets the background color for this element. If not defined, defaults to being
* transparent.
- * <p>
- * This field is made bindable and supports dynamic colors from version 1.2
- * Older renderers will still consider this field as non-bindable and will use the
- * static value.
+ *
+ * <p>This field is made bindable and supports dynamic colors from version 1.2 Older
+ * renderers will still consider this field as non-bindable and will use the static
+ * value.
*/
@NonNull
public Builder setColor(@NonNull ColorProp color) {
@@ -2312,8 +2311,8 @@
/**
* {@link Modifiers} that can be used with {@link
- * androidx.wear.tiles.LayoutElementBuilders.Span} elements. These may change the way they are
- * drawn, or change their behaviour.
+ * androidx.wear.protolayout.LayoutElementBuilders.Span} elements. These may change the way they
+ * are drawn, or change their behaviour.
*/
public static final class SpanModifiers {
private final ModifiersProto.SpanModifiers mImpl;
diff --git a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt
index 48cbce5..1608c29 100644
--- a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt
+++ b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt
@@ -694,6 +694,7 @@
bitmap!!.assertAgainstGolden(screenshotRule, "left_complication_pressed")
}
+ @Ignore("b/274981990")
@SuppressLint("NewApi")
@Test
public fun testHighlightRightComplicationInScreenshot() {