Implemented URLs open outside of live chat webview.

This commit is contained in:
Koen J 2025-07-30 13:46:31 +02:00
commit 5f0a89d13b
2 changed files with 41 additions and 5 deletions

View file

@ -454,6 +454,29 @@ class VideoDetailView : ConstraintLayout {
fragment.navigate<VideoDetailFragment>(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<VideoDetailFragment>(it.targetUrl);
};
StateApp.instance.preventPictureInPicture.subscribe(this) {
Logger.i(TAG, "StateApp.instance.preventPictureInPicture.subscribe preventPictureInPicture = true");
preventPictureInPicture = true;

View file

@ -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<LiveEventRaid>();
val onRaidPrevent = Event1<LiveEventRaid>();
val onUrlClick = Event1<Uri>()
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);