Skip to content

Commit 48d6cf7

Browse files
committed
refactor: cleanup public method API of CustomExoPlayerView
1 parent 9be0925 commit 48d6cf7

3 files changed

Lines changed: 24 additions & 22 deletions

File tree

app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ class PlayerFragment : Fragment(R.layout.fragment_player), CustomPlayerCallback
250250

251251
override fun onPlaybackStateChanged(playbackState: Int) {
252252
// set the playback speed to one if having reached the end of a livestream
253-
if (playbackState == Player.STATE_BUFFERING && binding.player.isLive &&
253+
if (playbackState == Player.STATE_BUFFERING && streams.isLive &&
254254
playerController.duration - playerController.currentPosition < 700
255255
) {
256256
playerController.setPlaybackSpeed(1f)
@@ -1156,7 +1156,6 @@ class PlayerFragment : Fragment(R.layout.fragment_player), CustomPlayerCallback
11561156
)
11571157
playerChannelSubCount.isVisible = streams.uploaderSubscriberCount >= 0
11581158

1159-
player.isLive = streams.isLive
11601159
relPlayerDownload.isVisible = !streams.isLive && !isOffline
11611160
}
11621161
playerControlsBinding.exoTitle.text = streams.title
@@ -1452,4 +1451,8 @@ class PlayerFragment : Fragment(R.layout.fragment_player), CustomPlayerCallback
14521451
override fun isVideoShort(): Boolean {
14531452
return streams.isShort
14541453
}
1454+
1455+
override fun isVideoLive(): Boolean {
1456+
return streams.isLive
1457+
}
14551458
}

app/src/main/java/com/github/libretube/ui/interfaces/CustomPlayerCallback.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ interface CustomPlayerCallback {
44
fun toggleFullscreen()
55
fun getVideoId(): String
66
fun isVideoShort(): Boolean
7+
fun isVideoLive(): Boolean
78
}

app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)