2020-10-11 13:18:20 +02:00
package org.mosad.teapod
import android.net.Uri
2020-10-11 14:14:38 +02:00
import android.os.Build
2020-10-11 13:18:20 +02:00
import android.os.Bundle
2020-10-11 14:14:38 +02:00
import android.util.Log
2020-10-11 13:18:20 +02:00
import android.view.View
2020-10-11 14:14:38 +02:00
import android.view.WindowInsets
import android.view.WindowInsetsController
2020-10-11 13:18:20 +02:00
import androidx.appcompat.app.AppCompatActivity
import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.MediaItem
import com.google.android.exoplayer2.Player
import com.google.android.exoplayer2.SimpleExoPlayer
import com.google.android.exoplayer2.source.hls.HlsMediaSource
import com.google.android.exoplayer2.upstream.DataSource
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory
import com.google.android.exoplayer2.util.Util
import kotlinx.android.synthetic.main.activity_player.*
class PlayerActivity : AppCompatActivity ( ) {
private lateinit var player : SimpleExoPlayer
private lateinit var dataSourceFactory : DataSource . Factory
private var streamUrl = " "
private var playWhenReady = true
private var currentWindow = 0
private var playbackPosition : Long = 0
2020-10-11 14:14:38 +02:00
2020-10-11 13:18:20 +02:00
override fun onCreate ( savedInstanceState : Bundle ? ) {
super . onCreate ( savedInstanceState )
setContentView ( R . layout . activity _player )
2020-10-11 14:14:38 +02:00
hideBars ( ) // Initial hide the bars
2020-10-11 13:18:20 +02:00
streamUrl = intent . getStringExtra ( " streamUrl " ) . toString ( )
}
override fun onStart ( ) {
super . onStart ( )
if ( Util . SDK _INT > 23 ) {
initPlayer ( )
if ( video _view != null ) video _view . onResume ( )
}
}
override fun onResume ( ) {
super . onResume ( )
if ( Util . SDK _INT <= 23 ) {
initPlayer ( )
if ( video _view != null ) video _view . onResume ( )
}
}
override fun onPause ( ) {
super . onPause ( )
if ( Util . SDK _INT <= 23 ) {
if ( video _view != null ) video _view . onPause ( )
releasePlayer ( )
}
}
override fun onStop ( ) {
super . onStop ( )
if ( Util . SDK _INT > 23 ) {
if ( video _view != null ) video _view . onPause ( )
releasePlayer ( )
}
}
private fun initPlayer ( ) {
if ( streamUrl . isEmpty ( ) ) {
2020-10-11 14:14:38 +02:00
Log . e ( javaClass . name , " No stream url was set. " )
2020-10-11 13:18:20 +02:00
return
}
player = SimpleExoPlayer . Builder ( this ) . build ( )
dataSourceFactory = DefaultDataSourceFactory ( this , Util . getUserAgent ( this , " Teapod " ) )
val mediaSource = HlsMediaSource . Factory ( dataSourceFactory )
. createMediaSource ( MediaItem . fromUri ( Uri . parse ( streamUrl ) ) )
player . setMediaSource ( mediaSource )
player . prepare ( )
player . play ( )
player . addListener ( object : Player . EventListener {
override fun onPlaybackStateChanged ( state : Int ) {
super . onPlaybackStateChanged ( state )
loading . visibility = when ( state ) {
2020-10-11 14:14:38 +02:00
ExoPlayer . STATE _READY -> View . GONE
2020-10-11 13:18:20 +02:00
ExoPlayer . STATE _BUFFERING -> View . VISIBLE
else -> View . GONE
}
}
} )
2020-10-11 14:14:38 +02:00
// when the player controls get hidden, hide the bars too
video _view . setControllerVisibilityListener {
if ( it == View . GONE ) hideBars ( )
}
2020-10-11 13:18:20 +02:00
video _view . player = player
}
private fun releasePlayer ( ) {
playbackPosition = player . currentPosition
currentWindow = player . currentWindowIndex
playWhenReady = player . playWhenReady
player . release ( )
}
2020-10-11 14:14:38 +02:00
/ * *
* hide the status and navigation bar
* /
private fun hideBars ( ) {
if ( Build . VERSION . SDK _INT >= Build . VERSION_CODES . R ) {
window . setDecorFitsSystemWindows ( false )
window . insetsController ?. apply {
hide ( WindowInsets . Type . statusBars ( ) or WindowInsets . Type . navigationBars ( ) )
systemBarsBehavior = WindowInsetsController . BEHAVIOR _SHOW _BARS _BY _SWIPE
}
} else {
@Suppress ( " deprecation " )
window . decorView . systemUiVisibility =
( View . SYSTEM _UI _FLAG _FULLSCREEN or View . SYSTEM _UI _FLAG _HIDE _NAVIGATION )
}
}
2020-10-11 13:18:20 +02:00
}