Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
) {
Expand All @@ -103,7 +103,7 @@ internal class LegacyYouTubePlayerView(
}

initialize = {
webViewYouTubePlayer.initialize({ it.addListener(youTubePlayerListener) }, playerOptions)
webViewYouTubePlayer.initialize(youTubePlayerListener, playerOptions)
}

if (!handleNetworkEvents) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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<YouTubePlayerListener> 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()
}

Expand All @@ -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? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down