@@ -115,13 +115,7 @@ class CustomExoPlayerView(
115115 */
116116
117117 private val runnableHandler = Handler (Looper .getMainLooper())
118- var isPlayerLocked: Boolean = false
119- var isLive: Boolean = false
120- set(value) {
121- field = value
122- updateDisplayedDurationType()
123- updateCurrentPosition()
124- }
118+ private var isPlayerLocked: Boolean = false
125119
126120 private var resizeModePref: Int
127121 set(value) {
@@ -140,7 +134,7 @@ class CustomExoPlayerView(
140134 AspectRatioFrameLayout .RESIZE_MODE_FILL to R .string.resize_mode_fill
141135 )
142136
143- val activity get() = context as BaseActivity
137+ private val activity get() = context as BaseActivity
144138
145139 private val supportFragmentManager
146140 get() = activity.supportFragmentManager
@@ -167,11 +161,12 @@ class CustomExoPlayerView(
167161 */
168162 var currentWindow: Window ? = null
169163
170- var selectedResolution: Int? = null
164+ private var selectedResolution: Int? = null
171165 var sponsorBlockAutoSkip = true
166+ private set
172167
173168 private var selectedAudioLanguageAndRoleFlags: Pair <String ?, @C.RoleFlags Int >? = null
174- private var playerCallback: CustomPlayerCallback ? = null
169+ private lateinit var playerCallback: CustomPlayerCallback
175170
176171
177172 // if null, it's been set to automatic
@@ -189,10 +184,10 @@ class CustomExoPlayerView(
189184 playerView = this ,
190185 videoFrameView = backgroundBinding.exoContentFrame,
191186 onSwipeUpCompleted = {
192- if (! isFullscreen()) playerCallback? .toggleFullscreen()
187+ if (! isFullscreen()) playerCallback.toggleFullscreen()
193188 },
194189 onSwipeDownCompleted = {
195- if (isFullscreen()) playerCallback? .toggleFullscreen()
190+ if (isFullscreen()) playerCallback.toggleFullscreen()
196191 }
197192 )
198193 }
@@ -273,6 +268,9 @@ class CustomExoPlayerView(
273268 captions.firstOrNull { it.language == PlayerHelper .defaultSubtitleCode }
274269
275270 updateCurrentSubtitle(defaultLangCaption?.id)
271+
272+ // if the video is live, the remaining time is displayed instead of duration
273+ updateDisplayedDurationType()
276274 }
277275 }
278276 })
@@ -328,7 +326,7 @@ class CustomExoPlayerView(
328326 updateDisplayedDurationType(false )
329327 }
330328 binding.position.setOnClickListener {
331- if (isLive ) player?.let { it.seekTo(it.duration) }
329+ if (playerCallback.isVideoLive() ) player?.let { it.seekTo(it.duration) }
332330 }
333331
334332 updateCurrentPosition()
@@ -373,7 +371,7 @@ class CustomExoPlayerView(
373371
374372 updateMarginsByFullscreenMode()
375373
376- commonPlayerViewModel? .isFullscreen? .observe(viewLifecycleOwner) { isFullscreen ->
374+ commonPlayerViewModel.isFullscreen.observe(viewLifecycleOwner) { isFullscreen ->
377375 updateTopBarMargin()
378376
379377 binding.fullscreen.isInvisible = PlayerHelper .autoFullscreenEnabled
@@ -438,7 +436,7 @@ class CustomExoPlayerView(
438436 * Update the displayed duration of the video
439437 */
440438 private fun updateDisplayedDuration () {
441- if (isLive ) return
439+ if (playerCallback.isVideoLive() ) return
442440
443441 val duration = player?.duration?.div(1000 ) ? : return
444442 if (duration < 0 ) return
@@ -523,7 +521,7 @@ class CustomExoPlayerView(
523521 var shouldShowTimeLeft = showTimeLeft ? : PreferenceHelper
524522 .getBoolean(PreferenceKeys .SHOW_TIME_LEFT , false )
525523 // always show the time left only if it's a livestream
526- if (isLive ) shouldShowTimeLeft = true
524+ if (playerCallback.isVideoLive() ) shouldShowTimeLeft = true
527525 if (showTimeLeft != null ) {
528526 // save whether to show time left or duration for next session
529527 PreferenceHelper .putBoolean(PreferenceKeys .SHOW_TIME_LEFT , shouldShowTimeLeft)
@@ -1075,7 +1073,7 @@ class CustomExoPlayerView(
10751073 val player = player as ? MediaController ? : return
10761074
10771075 val transformedResolution =
1078- if (! isSelectedByUser && playerCallback? .isVideoShort() ? : false ) {
1076+ if (! isSelectedByUser && playerCallback.isVideoShort()) {
10791077 ceil(resolution * 16.0 / 9.0 ).toInt()
10801078 } else {
10811079 resolution
@@ -1147,7 +1145,7 @@ class CustomExoPlayerView(
11471145 val player = player ? : return
11481146
11491147 val videoStats =
1150- PlayerHelper .getVideoStats(player.currentTracks, playerCallback? .getVideoId().orEmpty ())
1148+ PlayerHelper .getVideoStats(player.currentTracks, playerCallback.getVideoId())
11511149 StatsSheet ()
11521150 .apply { arguments = bundleOf(IntentData .videoStats to videoStats) }
11531151 .show(supportFragmentManager)
@@ -1229,7 +1227,7 @@ class CustomExoPlayerView(
12291227 val timeLeft = duration - position
12301228
12311229 binding.position.text =
1232- if (isLive ) context.getString(R .string.live) else DateUtils .formatElapsedTime(position)
1230+ if (playerCallback.isVideoLive() ) context.getString(R .string.live) else DateUtils .formatElapsedTime(position)
12331231 binding.timeLeft.text = " -${DateUtils .formatElapsedTime(timeLeft)} "
12341232
12351233 runnableHandler.postDelayed(100 , UPDATE_POSITION_TOKEN , this ::updateCurrentPosition)
@@ -1416,7 +1414,7 @@ class CustomExoPlayerView(
14161414 }
14171415
14181416 KeyEvent .KEYCODE_F -> {
1419- playerCallback? .toggleFullscreen()
1417+ playerCallback.toggleFullscreen()
14201418 }
14211419
14221420 else -> return false
0 commit comments