From 5cd3796faeaf912f90269ae0d4dfaf6f851279da Mon Sep 17 00:00:00 2001 From: liuzhaowen <2077208336@qq.com> Date: Tue, 28 Nov 2023 14:07:50 +0800 Subject: [PATCH 1/4] FullscreenListener leakcary --- .../core/player/views/WebViewYouTubePlayer.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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..d805c2b3 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 { @@ -107,6 +107,7 @@ internal class WebViewYouTubePlayer constructor( override fun destroy() { _youTubePlayer.release() + listener=null super.destroy() } @@ -129,12 +130,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? { From 08355c2ec1b15f5d77d84058673b930e666b5c17 Mon Sep 17 00:00:00 2001 From: liuzhaowen <2077208336@qq.com> Date: Tue, 28 Nov 2023 14:29:14 +0800 Subject: [PATCH 2/4] FullscreenListener leakcary --- .../androidyoutubeplayer/core/player/views/YouTubePlayerView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 5e5e60c332490f79098805ba848d1f4c9ec91e7a Mon Sep 17 00:00:00 2001 From: liuzhaowen <2077208336@qq.com> Date: Wed, 29 Nov 2023 10:34:17 +0800 Subject: [PATCH 3/4] fix leakcary Init --- .../player/views/LegacyYouTubePlayerView.kt | 4 ++-- .../core/player/views/WebViewYouTubePlayer.kt | 21 +++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) 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 d805c2b3..d1f49001 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 @@ -89,25 +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() { _youTubePlayer.release() listener=null + if (youTubePlayerInitListener!=null){ + try{ + //Prevent anomalies + _youTubePlayer.removeListener(youTubePlayerInitListener!!) + }catch (e:Exception){ + e.printStackTrace() + } + youTubePlayerInitListener=null + } super.destroy() } From 338039e1aaa8f9b8ab3703f0946e2a282e8e6491 Mon Sep 17 00:00:00 2001 From: liuzhaowen <2077208336@qq.com> Date: Wed, 29 Nov 2023 10:44:46 +0800 Subject: [PATCH 4/4] fix leakcary Init --- .../core/player/views/WebViewYouTubePlayer.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 d1f49001..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 @@ -110,9 +110,7 @@ internal class WebViewYouTubePlayer constructor( fun removeListener(listener: YouTubePlayerListener) = _youTubePlayer.listeners.remove(listener) override fun destroy() { - _youTubePlayer.release() - listener=null - if (youTubePlayerInitListener!=null){ + if (youTubePlayerInitListener!=null){ try{ //Prevent anomalies _youTubePlayer.removeListener(youTubePlayerInitListener!!) @@ -121,6 +119,8 @@ internal class WebViewYouTubePlayer constructor( } youTubePlayerInitListener=null } + _youTubePlayer.release() + listener=null super.destroy() }