Well I finally made it work.
import android.app.PendingIntent
import android.app.PictureInPictureParams
import android.app.RemoteAction
import android.content.Intent
import android.content.res.Configuration
import android.graphics.drawable.Icon
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.util.Rational
import android.view.Window
import android.widget.Toast
import com.google.android.youtube.player.YouTubeBaseActivity
import com.google.android.youtube.player.YouTubeInitializationResult
import com.google.android.youtube.player.YouTubePlayer
import com.nishanatthani.nnfda.R
import com.nishanatthani.nnfda.databinding.ActivityMainBinding
class MainActivity : YouTubeBaseActivity() {
private lateinit var bind: ActivityMainBinding
private val RECOVERY_REQUEST = 1
private var yPlayer: YouTubePlayer? = null
private lateinit var yListener: YouTubePlayer.OnInitializedListener
private val apiKey: String = "<API_KEY>"
private var id: String = "a"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
bind = ActivityMainBinding.inflate(layoutInflater)
requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(bind.root)
if (intent != null) {
id = intent.getStringExtra("id").toString()
if (id == "a") {
onBackPressed()
}
} else {
onBackPressed()
}
initializeListener()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val actions = ArrayList<RemoteAction>()
.add(
RemoteAction(
Icon.createWithResource(
this@MainActivity,
R.drawable.ic_right
),
"Play", " ",
PendingIntent.getActivity(
this@MainActivity, 0,
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://www.youtube.com/channel/UCC8Z-Sv-pUsKtQof9ROm3hw/videos")
),
PendingIntent.FLAG_ONE_SHOT
)
)
)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val pParams = PictureInPictureParams.Builder()
pParams.setAspectRatio(
Rational(340, 150)
)
enterPictureInPictureMode(pParams.build())
} else {
getYouTubePlayerProvider().initialize(apiKey, yListener)
}
}
private fun initializeListener() {
yListener = object : YouTubePlayer.OnInitializedListener {
override fun onInitializationSuccess(
provider: YouTubePlayer.Provider?,
player: YouTubePlayer?,
wasRestored: Boolean
) {
yPlayer = player
Log.e("InitializtionS1", wasRestored.toString())
if (!wasRestored) {
player?.loadVideo(id)
}
player?.setPlaybackEventListener(object : YouTubePlayer.PlaybackEventListener {
override fun onPlaying() {
Log.d("Playback", "Playing")
}
override fun onPaused() {
Log.d("Playback", "Paused")
}
override fun onStopped() {
// finish()
Log.d("Playback", "Stopped")
}
override fun onBuffering(p0: Boolean) {
Log.d("Playback", "Buffering")
}
override fun onSeekTo(p0: Int) {
Log.d("Playback", "Seek")
}
})
player?.setPlayerStateChangeListener(object :
YouTubePlayer.PlayerStateChangeListener {
override fun onLoading() {
Log.d("State", "Loading")
}
override fun onLoaded(p0: String?) {
// player.play()
Log.d("State", "Loaded")
}
override fun onAdStarted() {
Log.d("State", "Ad")
}
override fun onVideoStarted() {
Log.d("State", "Started")
}
override fun onVideoEnded() {
Log.d("State", "Ended")
finish()
}
override fun onError(p0: YouTubePlayer.ErrorReason?) {
Log.e("YPlayer", "Error ${p0?.name}")
// Toast.makeText(this@MainActivity, "Error ${p0?.name}", Toast.LENGTH_LONG).show()
player.play()
}
})
}
override fun onInitializationFailure(
provider: YouTubePlayer.Provider?,
errorReason: YouTubeInitializationResult?
) {
if (errorReason?.isUserRecoverableError == true) {
errorReason.getErrorDialog(this@MainActivity, RECOVERY_REQUEST).show()
} else {
Toast.makeText(
this@MainActivity,
"Player Error ${errorReason.toString()})",
Toast.LENGTH_LONG
)
.show()
}
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == RECOVERY_REQUEST) {
// Retry initialization if user performed a recovery action
getYouTubePlayerProvider().initialize(apiKey, yListener)
}
super.onActivityResult(requestCode, resultCode, data)
}
private fun getYouTubePlayerProvider(): YouTubePlayer.Provider {
return bind.player
}
override fun onPictureInPictureRequested(): Boolean {
Log.e("Pip Requested", "Requested")
return super.onPictureInPictureRequested()
}
override fun onPictureInPictureModeChanged(
isInPictureInPictureMode: Boolean,
newConfig: Configuration?
) {
getYouTubePlayerProvider().initialize(apiKey, yListener)
Log.e("PlayerPip", isInPictureInPictureMode.toString())
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
}
override fun onBackPressed() {
finish()
super.onBackPressed()
}
}