Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Activity compose #278

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
fix event emmiter
fllaryora committed May 15, 2023
commit c8a932664af77f78cddcdb98408a39eb27a805ff

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,38 +1,152 @@
package com.brightcove.player.samples.compose.activity

import android.os.Bundle
import android.view.ViewGroup.LayoutParams
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.brightcove.player.samples.compose.activity.ui.BrightcoveExoPlayerVideo
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.Lifecycle.Event.ON_ANY
import androidx.lifecycle.Lifecycle.Event.ON_CREATE
import androidx.lifecycle.Lifecycle.Event.ON_DESTROY
import androidx.lifecycle.Lifecycle.Event.ON_PAUSE
import androidx.lifecycle.Lifecycle.Event.ON_RESUME
import androidx.lifecycle.Lifecycle.Event.ON_START
import androidx.lifecycle.Lifecycle.Event.ON_STOP
import androidx.lifecycle.LifecycleEventObserver
import com.brightcove.player.event.EventEmitterImpl
import com.brightcove.player.event.EventLogger
import com.brightcove.player.model.DeliveryType.MP4
import com.brightcove.player.model.Video
import com.brightcove.player.playback.PlaybackNotification
import com.brightcove.player.samples.compose.activity.ui.theme.AndroidplayersamplesTheme
import com.brightcove.player.util.LifecycleUtil
import com.brightcove.player.view.BaseVideoView
import com.brightcove.player.view.BrightcoveExoPlayerVideoView

class MainActivity : ComponentActivity(), PlaybackNotification.OnRestorePlaybackHandler {

val TAG: String = MainActivity::class.java.simpleName
lateinit var baseVideoView: BaseVideoView
//lateinit var eventLogger: EventLogger
lateinit var lifecycleUtil: LifecycleUtil
//private var savedInstanceState: Bundle? = null

fun showClosedCaptioningDialog() {
baseVideoView.closedCaptioningController?.showCaptionsDialog()
}

fun enterFullScreen() {
baseVideoView.eventEmitter?.emit("enterFullScreen")
}

fun exitFullScreen() {
baseVideoView.eventEmitter?.emit("exitFullScreen")
}

class MainActivity : BrightcoveComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContent {
AndroidplayersamplesTheme {

var lifecycle by remember {
mutableStateOf(Lifecycle.Event.ON_CREATE)
}

val lifecycleOwner = LocalLifecycleOwner.current
DisposableEffect(lifecycleOwner) {
val observer = LifecycleEventObserver { _, event ->
lifecycle = event
}
lifecycleOwner.lifecycle.addObserver(observer)

onDispose {
lifecycleOwner.lifecycle.removeObserver(observer)
}
}
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
BrightcoveExoPlayerVideo(modifier = Modifier.fillMaxSize(),
initializeLifecycleUtil = ::initializeLifecycleUtil )
AndroidView(
modifier = Modifier
.fillMaxWidth()
.aspectRatio(16 / 9f),
// The viewBlock provides us with the Context so we do not have to pass this down into the @Composable
// ourself
factory = { context ->
val baseVideoView = BrightcoveExoPlayerVideoView(context).apply {
layoutParams = LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,
)
}
baseVideoView.eventEmitter = EventEmitterImpl()
//*****
lifecycleUtil = LifecycleUtil(baseVideoView)
lifecycleUtil.onCreate(savedInstanceState, this)
//eventLogger =
// EventLogger(this.baseVideoView.eventEmitter,
// true, this.javaClass.simpleName)
///*****
val video =
Video.createVideo("https://media.w3.org/2010/05/sintel/trailer.mp4", MP4)
baseVideoView.apply {
add(video)
analytics.account = "1760897681001"
start()
}
baseVideoView
},
update = {
when (lifecycle) {
ON_PAUSE -> {
lifecycleUtil.activityOnPause()
}
ON_RESUME -> {
lifecycleUtil.activityOnResume()
}
ON_CREATE -> {
//nothing
}
ON_START -> {
lifecycleUtil.activityOnStart()
}
ON_STOP -> {
lifecycleUtil.activityOnStop()
}
ON_DESTROY -> {
lifecycleUtil.onActivityDestroyed(this)
}
ON_ANY -> {
//nothing
}
}
},
)
}
}
}
}
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
AndroidplayersamplesTheme {
BrightcoveExoPlayerVideo(modifier = Modifier.fillMaxSize(), {})
override fun onSaveInstanceState(bundle: Bundle) {
baseVideoView.eventEmitter.on(
"activitySaveInstanceState"
) { super.onSaveInstanceState(bundle) }
lifecycleUtil.activityOnSaveInstanceState(bundle)
}
}
}

This file was deleted.

2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -188,6 +188,8 @@ configure(subprojects.findAll {it.name.endsWith('SampleApp')}) {
dependencies {
implementation "com.brightcove.player:android-sdk:${anpVersion}"
implementation "com.brightcove.player:exoplayer2:${anpVersion}"
//implementation "androidx.media3:media3-exoplayer:1.0.1"
//implamentation "androidx.media3:media3-ui:1.0.1"
}
}