Skip to content

Instantly share code, notes, and snippets.

@ademirqueiroga
ademirqueiroga / BasicMediaPlayerAdapter.kt
Last active January 29, 2023 10:47
BasicMediaPlayerAdapter.kt
class BasicMediaPlayerAdapter(context: Context) : MediaPlayerAdapter(context) {
val playlist = ArrayList<Movie>()
var playlistPosition = 0
private set
override fun next() = loadMovie((playlistPosition + 1).mod(playlist.size))
override fun previous() = loadMovie((playlistPosition - 1).mod(playlist.size))
@ademirqueiroga
ademirqueiroga / BasicTransportControlsGlue.kt
Created January 29, 2023 11:19
BasicTransportControlsGlue.kt
class BasicTransportControlsGlue(
context: Context,
playerAdapter: BasicMediaPlayerAdapter,
) : PlaybackTransportControlGlue<BasicMediaPlayerAdapter>(context, playerAdapter) {
// Primary actions
private val forwardAction = PlaybackControlsRow.FastForwardAction(context)
private val rewindAction = PlaybackControlsRow.RewindAction(context)
private val nextAction = PlaybackControlsRow.SkipNextAction(context)
private val previousAction = PlaybackControlsRow.SkipPreviousAction(context)
@ademirqueiroga
ademirqueiroga / BasicTransportControlGlue.kt
Last active January 29, 2023 12:04
Update BaseTransportControlGlue content information
val currentMovie: Movie
get() = playerAdapter.playlist[playerAdapter.playlistPosition]
// Event when ready state for play changes.
override fun onPreparedStateChanged() {
super.onPreparedStateChanged()
playWhenPrepared()
updateMovieInfo(currentMovie)
}
@ademirqueiroga
ademirqueiroga / BasicTransportControlsGlue.kt
Last active January 29, 2023 12:04
Intercepting D-Pad events
override fun onKey(v: View?, keyCode: Int, event: KeyEvent): Boolean {
if (host.isControlsOverlayVisible || event.repeatCount > 0) {
return super.onKey(v, keyCode, event)
}
return when (keyCode) {
KeyEvent.KEYCODE_DPAD_RIGHT -> if (event.action != KeyEvent.ACTION_DOWN) false else {
onActionClicked(forwardAction)
true
}
KeyEvent.KEYCODE_DPAD_LEFT -> if (event.action != KeyEvent.ACTION_DOWN) false else {
@ademirqueiroga
ademirqueiroga / PlaybackVideoFragment.kt
Created January 29, 2023 12:14
PlaybackVideoFragment
class PlaybackVideoFragment : VideoSupportFragment() {
private lateinit var transportControlGlue: BasicTransportControlGlue
private lateinit var fastForwardIndicatorView: View
private lateinit var rewindIndicatorView: View
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val movies = activity?.intent?.getParcelableArrayListExtra(EXTRA_MOVIES) ?: emptyList<Movie>()
transportControlGlue = BasicTransportControlGlue(
context = requireContext(),
@ademirqueiroga
ademirqueiroga / PlaybackVideoFragment.kt
Created January 29, 2023 12:19
PlaybackVideoFragment onKeyInterceptListener
setOnKeyInterceptListener { view, keyCode, event ->
if (isControlsOverlayVisible || event.repeatCount > 0) {
isShowOrHideControlsOverlayOnUserInteraction = true
} else when (keyCode) {
KeyEvent.KEYCODE_DPAD_RIGHT -> {
isShowOrHideControlsOverlayOnUserInteraction = event.action != KeyEvent.ACTION_DOWN
if (event.action == KeyEvent.ACTION_DOWN) {
animateIndicator(fastForwardIndicatorView)
}
}
@ademirqueiroga
ademirqueiroga / PlaybackVideoFragment.kt
Created January 29, 2023 12:29
PlaybackVideoFragment.animateIndicator
private fun animateIndicator(indicatorView: View) {
indicatorView.animate()
.withEndAction {
indicatorView.isVisible = false
indicatorView.alpha = 1F
indicatorView.scaleX = 1F
indicatorView.scaleY = 1F
}
.withStartAction {
indicatorView.isVisible = true
@ademirqueiroga
ademirqueiroga / AwesomeTransportControlGlue.kt
Created February 6, 2023 10:35
AwesomeTransportControlGlue.kt secondary actions
private val thumbsUpAction = PlaybackControlsRow.ThumbsUpAction(context).apply {
index = PlaybackControlsRow.ThumbsUpAction.INDEX_OUTLINE
}
private val shuffleAction = PlaybackControlsRow.ShuffleAction(context)
private val repeatAction = PlaybackControlsRow.RepeatAction(context)
private val myListAction = MyListAction(context)
override fun onCreateSecondaryActions(secondaryActionsAdapter: ArrayObjectAdapter) {
secondaryActionsAdapter.add(thumbsUpAction)
secondaryActionsAdapter.add(shuffleAction)
@ademirqueiroga
ademirqueiroga / MyListAction.kt
Created February 6, 2023 10:41
MyListAction.kt
class MyListAction(context: Context) : MultiAction(R.id.tv_my_list_action) {
init {
val drawables = arrayOf(
context.getDrawable(R.drawable.playback_controls_my_list_add),
context.getDrawable(R.drawable.playback_controls_my_list_remove),
)
setDrawables(drawables)
val labels = arrayOf(
context.getString(R.string.playback_controls_my_list_add),
context.getString(R.string.playback_controls_my_list_remove),
@ademirqueiroga
ademirqueiroga / AwesomeTransportControlGlue.kt
Created February 6, 2023 11:12
AwesomeTransportControlGlue.onSecondaryActionPressed
private fun onSecondaryActionPressed(action: Action) {
val adapter = controlsRow.secondaryActionsAdapter as? ArrayObjectAdapter ?: return
if (action is PlaybackControlsRow.MultiAction) {
action.nextIndex()
notifyItemChanged(adapter, action)
}
when (action) {
shuffleAction -> {
playerAdapter.setShuffleAction(shuffleAction.index)
if (shuffleAction.index == PlaybackControlsRow.ShuffleAction.INDEX_ON) {