Jetpack Compose Integration
To integrate the Vdocipher player using Jetpack Compose, follow these steps:
Step 1: Add Player Fragment
Set Up your Composable Function
Create a Composable function that uses AndroidView to host a fragment for the Vdocipher player. Retrieve the fragment instance in your activity.
 @Composable
    fun AppScreen(activity: AppCompatActivity) {
        AndroidView(modifier = Modifier.wrapContentHeight(), factory = { context ->
            FragmentContainerView(context).apply {
                id = android.R.id.content // Set an ID for the FragmentContainerView
                vdoPlayerUIFragment = VdoPlayerUIFragment()
                activity.supportFragmentManager.commit {
                    replace(id, vdoPlayerUIFragment) // Replace or add the fragment
                }
            }
        })
    }
If you want to create custom controls, disable the default controls by setting showControls="false".
    // To disable/enable player control use "showControls"
    val bundle = Bundle()
    bundle.putBoolean("showControls", false)
    vdoPlayerUIFragment = VdoPlayerUIFragment().apply {
        arguments = bundle
    }
    activity.supportFragmentManager.commit {
        replace(id, vdoPlayerUIFragment) // Replace or add the fragment
    }
Step 2: Initializing the Player and Starting Playback
Initialize the Player:
Ensure that the VdoPlayerUIFragment is successfully attached to the UI window before initializing the player.
Start by obtaining a VdoPlayer instance by calling the initialize() method on the vdoPlayerUIFragment. You'll need to pass an InitializationListener to this method to receive the VdoPlayer instance.
// Once the vdoPlayerUIFragment is successfully attached to the window, initialize the listener for VdoPlayer
 supportFragmentManager.registerFragmentLifecycleCallbacks(object :
     FragmentManager.FragmentLifecycleCallbacks() {
     override fun onFragmentResumed(fm: FragmentManager, fragment: Fragment) {
         super.onFragmentResumed(fm, fragment)
         if(fragment is VdoPlayerUIFragment) {
            vdoPlayerUIFragment.initialize(initializationListener)
         }
     }
 }, true)
Implement the Initialization Listener:
Declare and implement the InitializationListener to handle the initialization process. In the onInitializationSuccess() callback, you’ll receive the VdoPlayer instance, which can then be used to load and play media.
val initializationListener = object : PlayerHost.InitializationListener {
        override fun onInitializationSuccess(playerHost: PlayerHost, vdoPlayer: VdoPlayer, wasRestored: Boolean) {
            // Build a video initialization params object to load the player with a video
            val vdoInitParams = VdoInitParams.Builder()
                .setOtp("REPLACE WITH YOUR OTP")
                .setPlaybackInfo("REPLACE WITH YOUR PLAYBACK INFO")
                .build()
            // Load the player with the VdoInitParams object
            vdoPlayer.load(vdoInitParams)
        }
        override fun onInitializationFailure(playerHost: PlayerHost, errorDescription: ErrorDescription) {
            // Handle player initialization failure
        }
        override fun onDeInitializationSuccess() {
            // Called when the vdoPlayerUIFragment is detached from the parent activity and the player is deinitialized.
        }
}
Proceed with Playback Event Integration
To continue implementation with playback events, follow the guide: Listen to Playback Events.