Skip to content

Commit

Permalink
Merge pull request #587 from player-ui/expose-onStart-player-hook-and…
Browse files Browse the repository at this point in the history
…roid

Expose onStart player hook for Android
  • Loading branch information
mrigankmg authored Feb 11, 2025
2 parents bd039b0 + 83250d0 commit 7f083f5
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.intuit.playerui.core.constants.ConstantsController
import com.intuit.playerui.core.data.DataController
import com.intuit.playerui.core.experimental.ExperimentalPlayerApi
import com.intuit.playerui.core.expressions.ExpressionController
import com.intuit.playerui.core.flow.Flow
import com.intuit.playerui.core.flow.FlowController
import com.intuit.playerui.core.flow.FlowResult
import com.intuit.playerui.core.logger.TapableLogger
Expand Down Expand Up @@ -60,11 +61,15 @@ public abstract class Player : Pluggable {
/** The hook that creates and manages data */
public val dataController: NodeSyncHook1<DataController>

/** Manages validations (schema and x-field ) */
public val validationController: NodeSyncHook1<ValidationController>

/** A that's called for state changes in the flow execution */
public val state: NodeSyncHook1<out PlayerFlowState>

/** A hook to access the current flow */
public val onStart: NodeSyncHook1<Flow>

public companion object {
internal interface HooksByNode : Hooks, NodeWrapper
public fun serializer(): KSerializer<Hooks> = Serializer
Expand All @@ -77,6 +82,7 @@ public abstract class Player : Pluggable {
override val dataController: NodeSyncHook1<DataController> by NodeSerializableField(NodeSyncHook1.serializer(DataController.serializer()))
override val validationController: NodeSyncHook1<ValidationController> by NodeSerializableField(NodeSyncHook1.serializer(ValidationController.serializer()))
override val state: NodeSyncHook1<out PlayerFlowState> by NodeSerializableField(NodeSyncHook1.serializer(PlayerFlowState.serializer()))
override val onStart: NodeSyncHook1<Flow> by NodeSerializableField(NodeSyncHook1.serializer(Flow.serializer()))
}

internal object Serializer : KSerializer<Hooks> by NodeWrapperSerializer(Hooks::invoke) as KSerializer<Hooks>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.intuit.playerui.core.player
import com.intuit.playerui.core.NodeBaseTest
import com.intuit.playerui.core.bridge.hooks.NodeSyncHook1
import com.intuit.playerui.core.data.DataController
import com.intuit.playerui.core.flow.Flow
import com.intuit.playerui.core.flow.FlowController
import com.intuit.playerui.core.player.state.PlayerFlowState
import com.intuit.playerui.core.view.ViewController
Expand All @@ -25,6 +26,9 @@ internal class PlayerHooksTest : NodeBaseTest() {
@MockK
private lateinit var state: NodeSyncHook1<PlayerFlowState>

@MockK
private lateinit var onStart: NodeSyncHook1<Flow>

private val hooks by lazy {
Player.Hooks(node)
}
Expand All @@ -36,6 +40,7 @@ internal class PlayerHooksTest : NodeBaseTest() {
every { node.getSerializable<NodeSyncHook1<ViewController>>("viewController", any()) } returns vc
every { node.getSerializable<NodeSyncHook1<DataController>>("dataController", any()) } returns dc
every { node.getSerializable<NodeSyncHook1<PlayerFlowState>>("state", any()) } returns state
every { node.getSerializable<NodeSyncHook1<Flow>>("onStart", any()) } returns onStart
every { node.nativeReferenceEquals(any()) } returns true
}

Expand All @@ -61,4 +66,9 @@ internal class PlayerHooksTest : NodeBaseTest() {
fun state() {
assertNotNull(hooks.state)
}

@Test
fun onStart() {
assertNotNull(hooks.onStart)
}
}

0 comments on commit 7f083f5

Please sign in to comment.