From e557556772ee136d55fed6330fb54d5f9340949f Mon Sep 17 00:00:00 2001 From: Yogesh Bhagat Date: Thu, 9 Oct 2025 18:08:23 +0530 Subject: [PATCH 1/2] handle vimeo hls links properly --- .../openedx/course/presentation/unit/video/VideoUnitFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/course/src/main/java/org/openedx/course/presentation/unit/video/VideoUnitFragment.kt b/course/src/main/java/org/openedx/course/presentation/unit/video/VideoUnitFragment.kt index 708b9610a..737c36828 100644 --- a/course/src/main/java/org/openedx/course/presentation/unit/video/VideoUnitFragment.kt +++ b/course/src/main/java/org/openedx/course/presentation/unit/video/VideoUnitFragment.kt @@ -279,7 +279,7 @@ class VideoUnitFragment : Fragment(R.layout.fragment_video_unit) { @androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class) private fun setPlayerMedia(mediaItem: MediaItem) { - if (viewModel.videoUrl.endsWith(".m3u8")) { + if (viewModel.videoUrl.contains(".m3u8", ignoreCase = true)) { val factory = DefaultDataSource.Factory(requireContext()) val mediaSource: HlsMediaSource = HlsMediaSource.Factory(factory).createMediaSource(mediaItem) From becfe96b25f30eb973aeded25deb1ab77bdce564 Mon Sep 17 00:00:00 2001 From: Yogesh Bhagat Date: Mon, 13 Oct 2025 12:32:06 +0530 Subject: [PATCH 2/2] handle mp4 links for playing video --- .../presentation/unit/video/VideoUnitFragment.kt | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/course/src/main/java/org/openedx/course/presentation/unit/video/VideoUnitFragment.kt b/course/src/main/java/org/openedx/course/presentation/unit/video/VideoUnitFragment.kt index 737c36828..0a464895a 100644 --- a/course/src/main/java/org/openedx/course/presentation/unit/video/VideoUnitFragment.kt +++ b/course/src/main/java/org/openedx/course/presentation/unit/video/VideoUnitFragment.kt @@ -198,8 +198,9 @@ class VideoUnitFragment : Fragment(R.layout.fragment_video_unit) { val movieMetadata = MediaMetadata.Builder() .setMediaType(MediaMetadata.MEDIA_TYPE_MOVIE) .build() + val normalizedUrl = normalizeUrl(viewModel.videoUrl) val mediaItem = MediaItem.Builder().setMediaMetadata(movieMetadata) - .setUri(viewModel.videoUrl) + .setUri(normalizedUrl) .setMimeType("video/*") .build() @@ -292,6 +293,19 @@ class VideoUnitFragment : Fragment(R.layout.fragment_video_unit) { } } + // Convert to https when possible (helps avoid cleartext/network-security issues). + private fun normalizeUrl(url: String?): String? { + if (url.isNullOrBlank()) return url + val trimmed = url.trim() + return try { + if (trimmed.startsWith("http://", ignoreCase = true)) { + trimmed.replaceFirst("http://", "https://", ignoreCase = true) + } else trimmed + } catch (e: Exception) { + trimmed + } + } + companion object { private const val ARG_BLOCK_ID = "blockId" private const val ARG_VIDEO_URL = "videoUrl"