diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index 0d75e6a0..6a2df4d7 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -454,6 +454,29 @@ class VideoDetailView : ConstraintLayout { fragment.navigate(it.targetUrl); }; + _container_content_liveChat.onUrlClick.subscribe { uri -> + val c = context + if (c is MainActivity) { + fragment.lifecycleScope.launch(Dispatchers.Main) { + try { + if (!c.handleUrl(uri.toString())) { + Intent(Intent.ACTION_VIEW, uri).apply { + addCategory(Intent.CATEGORY_BROWSABLE) + context.startActivity(this) + } + } + } catch (e: Throwable) { + Log.e(TAG, "Failed to handle live chat URL") + } + } + } else { + Intent(Intent.ACTION_VIEW, uri).apply { + addCategory(Intent.CATEGORY_BROWSABLE) + context.startActivity(this) + } + } + } + _monetization.onSupportTap.subscribe { _container_content_support.setPolycentricProfile(_polycentricProfile); switchContentView(_container_content_support); @@ -478,11 +501,6 @@ class VideoDetailView : ConstraintLayout { _player.attachPlayer(); - _container_content_liveChat.onRaidNow.subscribe { - StatePlayer.instance.clearQueue(); - fragment.navigate(it.targetUrl); - }; - StateApp.instance.preventPictureInPicture.subscribe(this) { Logger.i(TAG, "StateApp.instance.preventPictureInPicture.subscribe preventPictureInPicture = true"); preventPictureInPicture = true; diff --git a/app/src/main/java/com/futo/platformplayer/views/overlays/LiveChatOverlay.kt b/app/src/main/java/com/futo/platformplayer/views/overlays/LiveChatOverlay.kt index a2ed19ef..fb89bc7d 100644 --- a/app/src/main/java/com/futo/platformplayer/views/overlays/LiveChatOverlay.kt +++ b/app/src/main/java/com/futo/platformplayer/views/overlays/LiveChatOverlay.kt @@ -2,11 +2,14 @@ package com.futo.platformplayer.views.overlays import android.animation.LayoutTransition import android.content.Context +import android.content.Intent import android.graphics.Color import android.graphics.PointF +import android.net.Uri import android.util.AttributeSet import android.util.DisplayMetrics import android.view.View +import android.webkit.WebResourceRequest import android.webkit.WebView import android.webkit.WebViewClient import android.widget.Button @@ -19,6 +22,7 @@ import androidx.recyclerview.widget.LinearSmoothScroller import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.futo.platformplayer.R +import com.futo.platformplayer.activities.MainActivity import com.futo.platformplayer.api.media.LiveChatManager import com.futo.platformplayer.api.media.models.live.ILiveChatWindowDescriptor import com.futo.platformplayer.api.media.models.live.ILiveEventChatMessage @@ -41,6 +45,7 @@ import kotlinx.coroutines.launch import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import toAndroidColor +import androidx.core.net.toUri class LiveChatOverlay : LinearLayout { @@ -92,6 +97,7 @@ class LiveChatOverlay : LinearLayout { val onRaidNow = Event1(); val onRaidPrevent = Event1(); + val onUrlClick = Event1() private val _argJsonSerializer = Json; @@ -116,6 +122,18 @@ class LiveChatOverlay : LinearLayout { view?.evaluateJavascript("setInterval(()=>{" + toRemoveJSInterval + "}, 1000)") {}; }; } + + override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean { + onUrlClick.emit(request.url) + return true + } + + // API < 24 + @Suppress("DEPRECATION") + override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { + onUrlClick.emit(url.toUri()) + return true + } }; _chatContainer = findViewById(R.id.chatContainer);