Skip to content

Commit cf07a61

Browse files
Exoplayer to media3 migration (#43)
* Migrated ExoPlayer to Media3 * Minor changes of deprecated logic * Code review changes
1 parent 5ccaa6b commit cf07a61

File tree

8 files changed

+29
-27
lines changed

8 files changed

+29
-27
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ ext {
2727
fragment_version = "1.6.1"
2828
constraintlayout_version = "2.1.4"
2929
viewpager2_version = "1.0.0"
30-
exoplayer_version = "2.18.7"
30+
media3 = "1.1.1"
3131
youtubeplayer_version = "11.1.0"
3232

3333
firebase_version = "32.1.0"

course/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ dependencies {
6161
implementation project(path: ':core')
6262
implementation project(path: ':discussion')
6363
implementation "com.pierfrancescosoffritti.androidyoutubeplayer:core:$youtubeplayer_version"
64-
implementation "com.google.android.exoplayer:exoplayer:$exoplayer_version"
64+
implementation "androidx.media3:media3-exoplayer:$media3"
65+
implementation "androidx.media3:media3-ui:$media3"
6566

6667
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
6768
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

course/src/main/java/org/openedx/course/presentation/unit/video/VideoFullScreenFragment.kt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ import android.widget.FrameLayout
88
import androidx.core.os.bundleOf
99
import androidx.core.view.WindowInsetsCompat
1010
import androidx.fragment.app.Fragment
11-
import com.google.android.exoplayer2.C
12-
import com.google.android.exoplayer2.ExoPlayer
13-
import com.google.android.exoplayer2.MediaItem
14-
import com.google.android.exoplayer2.Player
11+
import androidx.media3.common.C
12+
import androidx.media3.common.MediaItem
13+
import androidx.media3.common.Player
14+
import androidx.media3.exoplayer.ExoPlayer
15+
import org.koin.androidx.viewmodel.ext.android.viewModel
16+
import org.koin.core.parameter.parametersOf
1517
import org.openedx.core.extension.requestApplyInsetsWhenAttached
1618
import org.openedx.core.presentation.global.WindowSizeHolder
1719
import org.openedx.core.presentation.global.viewBinding
1820
import org.openedx.course.R
1921
import org.openedx.course.databinding.FragmentVideoFullScreenBinding
20-
import org.koin.androidx.viewmodel.ext.android.viewModel
21-
import org.koin.core.parameter.parametersOf
2222

2323
class VideoFullScreenFragment : Fragment(R.layout.fragment_video_full_screen) {
2424

@@ -67,6 +67,7 @@ class VideoFullScreenFragment : Fragment(R.layout.fragment_video_full_screen) {
6767
initPlayer()
6868
}
6969

70+
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
7071
private fun initPlayer() {
7172
with(binding) {
7273
if (exoPlayer == null) {
@@ -77,7 +78,7 @@ class VideoFullScreenFragment : Fragment(R.layout.fragment_video_full_screen) {
7778
playerView.setShowNextButton(false)
7879
playerView.setShowPreviousButton(false)
7980
val mediaItem = MediaItem.fromUri(viewModel.videoUrl)
80-
exoPlayer?.setMediaItem(mediaItem, viewModel.currentVideoTime.toLong())
81+
exoPlayer?.setMediaItem(mediaItem, viewModel.currentVideoTime)
8182
exoPlayer?.prepare()
8283
exoPlayer?.playWhenReady = false
8384

course/src/main/java/org/openedx/course/presentation/unit/video/VideoUnitFragment.kt

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.openedx.course.presentation.unit.video
22

3-
import android.graphics.Point
43
import android.os.Bundle
54
import android.os.Handler
65
import android.os.Looper
@@ -18,9 +17,13 @@ import androidx.compose.ui.Modifier
1817
import androidx.core.os.bundleOf
1918
import androidx.core.view.isVisible
2019
import androidx.fragment.app.Fragment
21-
import com.google.android.exoplayer2.ExoPlayer
22-
import com.google.android.exoplayer2.MediaItem
23-
import com.google.android.exoplayer2.Player
20+
import androidx.media3.common.MediaItem
21+
import androidx.media3.common.Player
22+
import androidx.media3.exoplayer.ExoPlayer
23+
import androidx.window.layout.WindowMetricsCalculator
24+
import org.koin.android.ext.android.inject
25+
import org.koin.androidx.viewmodel.ext.android.viewModel
26+
import org.koin.core.parameter.parametersOf
2427
import org.openedx.core.extension.computeWindowSizeClasses
2528
import org.openedx.core.extension.dpToPixel
2629
import org.openedx.core.extension.objectToString
@@ -38,9 +41,6 @@ import org.openedx.course.presentation.ui.ConnectionErrorView
3841
import org.openedx.course.presentation.ui.VideoRotateView
3942
import org.openedx.course.presentation.ui.VideoSubtitles
4043
import org.openedx.course.presentation.ui.VideoTitle
41-
import org.koin.android.ext.android.inject
42-
import org.koin.androidx.viewmodel.ext.android.viewModel
43-
import org.koin.core.parameter.parametersOf
4444
import kotlin.math.roundToInt
4545

4646
class VideoUnitFragment : Fragment(R.layout.fragment_video_unit) {
@@ -172,12 +172,11 @@ class VideoUnitFragment : Fragment(R.layout.fragment_video_unit) {
172172
}
173173
}
174174

175-
binding.connectionError.isVisible =
176-
!viewModel.hasInternetConnection && !viewModel.isDownloaded
177-
val display = requireActivity().windowManager.defaultDisplay
178-
val size = Point()
179-
display.getSize(size)
180-
val width = size.x - requireContext().dpToPixel(32)
175+
binding.connectionError.isVisible = !viewModel.hasInternetConnection && !viewModel.isDownloaded
176+
177+
val windowMetrics = WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(requireActivity())
178+
val currentBounds = windowMetrics.bounds
179+
val width = currentBounds.width() - requireContext().dpToPixel(32)
181180
val minHeight = requireContext().dpToPixel(194).roundToInt()
182181
val height = (width / 16f * 9f).roundToInt()
183182
val layoutParams = binding.playerView.layoutParams as FrameLayout.LayoutParams
@@ -203,7 +202,8 @@ class VideoUnitFragment : Fragment(R.layout.fragment_video_unit) {
203202
}
204203
}
205204

206-
private fun initPlayer() {
205+
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
206+
private fun initPlayer() {
207207
with(binding) {
208208
if (exoPlayer == null) {
209209
exoPlayer = ExoPlayer.Builder(requireContext())

course/src/main/java/org/openedx/course/presentation/unit/video/VideoViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.openedx.course.presentation.unit.video
22

33
import androidx.lifecycle.viewModelScope
4-
import com.google.android.exoplayer2.C
4+
import androidx.media3.common.C
55
import org.openedx.core.BaseViewModel
66
import org.openedx.course.data.repository.CourseRepository
77
import org.openedx.core.system.notifier.CourseNotifier

course/src/main/res/layout-w600dp-h480dp/fragment_video_unit.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
app:layout_constraintStart_toStartOf="parent"
3535
app:layout_constraintTop_toBottomOf="@id/cv_video_title">
3636

37-
<com.google.android.exoplayer2.ui.StyledPlayerView
37+
<androidx.media3.ui.PlayerView
3838
android:id="@+id/player_view"
3939
android:layout_width="560dp"
4040
android:layout_height="100dp"

course/src/main/res/layout/fragment_video_full_screen.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
android:layout_width="match_parent"
66
android:layout_height="match_parent">
77

8-
<com.google.android.exoplayer2.ui.StyledPlayerView
8+
<androidx.media3.ui.PlayerView
99
android:id="@+id/player_view"
1010
android:layout_width="match_parent"
1111
android:layout_height="match_parent"

course/src/main/res/layout/fragment_video_unit.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
app:layout_constraintStart_toStartOf="parent"
2828
app:layout_constraintTop_toBottomOf="@id/cv_video_title">
2929

30-
<com.google.android.exoplayer2.ui.StyledPlayerView
30+
<androidx.media3.ui.PlayerView
3131
android:id="@+id/player_view"
3232
android:layout_width="match_parent"
3333
android:layout_height="100dp"

0 commit comments

Comments
 (0)