diff --git a/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/views/LegacyYouTubePlayerView.kt b/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/views/LegacyYouTubePlayerView.kt index 5c01f78f..1313b9a8 100644 --- a/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/views/LegacyYouTubePlayerView.kt +++ b/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/views/LegacyYouTubePlayerView.kt @@ -90,7 +90,7 @@ internal class LegacyYouTubePlayerView( * @param playerOptions customizable options for the embedded video player, can be null. */ fun initialize( - youTubePlayerListener: YouTubePlayerListener, + youTubePlayerListener: YouTubePlayerListener?, handleNetworkEvents: Boolean, playerOptions: IFramePlayerOptions ) { @@ -103,7 +103,7 @@ internal class LegacyYouTubePlayerView( } initialize = { - webViewYouTubePlayer.initialize({ it.addListener(youTubePlayerListener) }, playerOptions) + webViewYouTubePlayer.initialize(youTubePlayerListener, playerOptions) } if (!handleNetworkEvents) { diff --git a/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/views/WebViewYouTubePlayer.kt b/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/views/WebViewYouTubePlayer.kt index d0d229d3..678a0d40 100644 --- a/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/views/WebViewYouTubePlayer.kt +++ b/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/views/WebViewYouTubePlayer.kt @@ -78,7 +78,7 @@ internal object FakeWebViewYouTubeListener : FullscreenListener { */ internal class WebViewYouTubePlayer constructor( context: Context, - private val listener: FullscreenListener, + private var listener: FullscreenListener?, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : WebView(context, attrs, defStyleAttr), YouTubePlayerBridge.YouTubePlayerBridgeCallbacks { @@ -89,24 +89,38 @@ internal class WebViewYouTubePlayer constructor( private val _youTubePlayer = YouTubePlayerImpl(this) internal val youtubePlayer: YouTubePlayer get() = _youTubePlayer - private lateinit var youTubePlayerInitListener: (YouTubePlayer) -> Unit + private var youTubePlayerInitListener:YouTubePlayerListener?=null internal var isBackgroundPlaybackEnabled = false - internal fun initialize(initListener: (YouTubePlayer) -> Unit, playerOptions: IFramePlayerOptions?) { - youTubePlayerInitListener = initListener + internal fun initialize(youTubePlayerListener:YouTubePlayerListener?, playerOptions: IFramePlayerOptions?) { + youTubePlayerInitListener = youTubePlayerListener initWebView(playerOptions ?: IFramePlayerOptions.default) } // create new set to avoid concurrent modifications override val listeners: Collection get() = _youTubePlayer.listeners.toSet() override fun getInstance(): YouTubePlayer = _youTubePlayer - override fun onYouTubeIFrameAPIReady() = youTubePlayerInitListener(_youTubePlayer) + override fun onYouTubeIFrameAPIReady() { + youTubePlayerInitListener?.let { + _youTubePlayer.addListener(it) + } + } fun addListener(listener: YouTubePlayerListener) = _youTubePlayer.listeners.add(listener) fun removeListener(listener: YouTubePlayerListener) = _youTubePlayer.listeners.remove(listener) override fun destroy() { + if (youTubePlayerInitListener!=null){ + try{ + //Prevent anomalies + _youTubePlayer.removeListener(youTubePlayerInitListener!!) + }catch (e:Exception){ + e.printStackTrace() + } + youTubePlayerInitListener=null + } _youTubePlayer.release() + listener=null super.destroy() } @@ -129,12 +143,12 @@ internal class WebViewYouTubePlayer constructor( override fun onShowCustomView(view: View, callback: CustomViewCallback) { super.onShowCustomView(view, callback) - listener.onEnterFullscreen(view) { callback.onCustomViewHidden() } + listener?.onEnterFullscreen(view) { callback.onCustomViewHidden() } } override fun onHideCustomView() { super.onHideCustomView() - listener.onExitFullscreen() + listener?.onExitFullscreen() } override fun getDefaultVideoPoster(): Bitmap? { diff --git a/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/views/YouTubePlayerView.kt b/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/views/YouTubePlayerView.kt index 11694865..1fe61793 100644 --- a/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/views/YouTubePlayerView.kt +++ b/core/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/player/views/YouTubePlayerView.kt @@ -55,7 +55,7 @@ class YouTubePlayerView( } } - private val legacyTubePlayerView = LegacyYouTubePlayerView(context, webViewFullscreenListener) + private val legacyTubePlayerView = LegacyYouTubePlayerView(context.applicationContext, webViewFullscreenListener) // this is a publicly accessible API var enableAutomaticInitialization: Boolean