I am trying to implement fullscreen using bitmovin in android, But fullscreen feature is is not working as expected. Is there any way that we can customize the full screen feature in the bitmovin player. Below is the sample code that I have implemented using bitmovin sample,
player = binding.playerView.player
// Instantiate a custom FullscreenHandler
val customFullscreenHandler = CustomFullscreenHandler(this, binding.playerView)
// Set the FullscreenHandler to the PlayerView
binding.playerView.setFullscreenHandler(customFullscreenHandler)
CustomFullScreenHandler class:
class CustomFullscreenHandler(
activity: Activity,
private val playerView: PlayerView
) : FullscreenHandler {
override var isFullscreen = false
private var decorView: View? = activity.window.decorView
private val playerOrientationListener =
PlayerOrientationListener(activity).apply { enable() }
private fun handleFullscreen(fullscreen: Boolean) {
isFullscreen = fullscreen
doSystemUiVisibility(fullscreen)
doLayoutChanges()
}
private fun doSystemUiVisibility(fullScreen: Boolean) {
decorView?.post {
val uiParams = getSystemUiVisibilityFlags(fullScreen, true)
decorView?.systemUiVisibility = uiParams
}
}
private fun doLayoutChanges() {
val mainLooper = Looper.getMainLooper()
val isAlreadyMainLooper = Looper.myLooper() == mainLooper
if (isAlreadyMainLooper) {
updateLayout()
} else {
val handler = Handler(mainLooper)
handler.post(::updateLayout)
}
}
private fun updateLayout() {
val parentView = playerView.parent
if (parentView !is ViewGroup) return
for (i in 0 until parentView.childCount) {
parentView
.getChildAt(i)
.takeIf { it !== playerView }
?.visibility = if (this.isFullscreen) View.GONE else View.VISIBLE
}
}
override fun onFullscreenRequested() = handleFullscreen(true)
override fun onFullscreenExitRequested() = handleFullscreen(false)
override fun onResume() {
if (isFullscreen) {
doSystemUiVisibility(isFullscreen)
}
}
override fun onPause() {}
override fun onDestroy() = playerOrientationListener.disable()
}
private const val ROTATION_THRESHOLD = 5
Player orientation class:
class PlayerOrientationListener(private val activity: Activity) : OrientationEventListener(activity) {
override fun onOrientationChanged(orientation: Int) {
activity.requestedOrientation = when {
abs(orientation - 0) < ROTATION_THRESHOLD → ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
abs(orientation - 90) < ROTATION_THRESHOLD → ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
abs(orientation - 180) < ROTATION_THRESHOLD → ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
abs(orientation - 270) < ROTATION_THRESHOLD → ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
else → return
}
}
}
We wanted to have a customized full scree icon and operate full screen as we require.