in app/src/main/java/com/amazonaws/ivs/player/ecommerce/ui/MainActivity.kt [53:159]
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.storeButton.setOnClickListener {
if (isNormalOrMetadataState) {
val endState = when (anchorType) {
AnchorType.TOP_LEFT -> if (isNormalState) R.id.state_normal_to_streams_top_left else
R.id.state_metadata_to_streams_top_left
AnchorType.TOP_RIGHT -> if (isNormalState) R.id.state_normal_to_streams_top_right else
R.id.state_metadata_to_streams_top_right
AnchorType.BOTTOM_LEFT -> if (isNormalState) R.id.state_normal_to_streams_bottom_left else
R.id.state_metadata_to_streams_bottom_left
AnchorType.BOTTOM_RIGHT -> if (isNormalState) R.id.state_normal_to_streams_bottom_right else
R.id.state_metadata_to_streams_bottom_right
}
binding.motionLayout.setTransition(endState)
binding.motionLayout.transitionToEnd()
}
}
binding.playerView.setOnClickListener {
if (touchOffset != null) return@setOnClickListener
when (binding.motionLayout.currentState) {
R.id.state_normal -> {
Timber.d("Transition to normal tapped")
binding.motionLayout.setTransition(R.id.state_normal_to_tapped)
binding.motionLayout.transitionToEnd()
}
R.id.state_metadata -> {
Timber.d("Transition to metadata tapped")
binding.motionLayout.setTransition(R.id.state_metadata_to_tapped)
binding.motionLayout.transitionToEnd()
}
R.id.state_tapped_normal -> {
Timber.d("Transition to normal")
binding.motionLayout.setTransition(R.id.state_tapped_to_normal)
binding.motionLayout.transitionToEnd()
}
R.id.state_tapped_metadata -> {
Timber.d("Transition to metadata")
binding.motionLayout.setTransition(R.id.state_tapped_to_metadata)
binding.motionLayout.transitionToEnd()
}
R.id.state_streams_bottom_right,
R.id.state_streams_bottom_left,
R.id.state_streams_top_right,
R.id.state_streams_top_left -> restorePlayerView()
}
}
binding.motionLayout.setTransitionListener(object : TransitionAdapter() {
override fun onTransitionCompleted(motionLayout: MotionLayout?, currentId: Int) {
super.onTransitionCompleted(motionLayout, currentId)
resizePlayer()
}
override fun onTransitionChange(motionLayout: MotionLayout?, startId: Int, endId: Int, progress: Float) {
super.onTransitionChange(motionLayout, startId, endId, progress)
if (endId == R.id.state_normal || endId == R.id.state_metadata) resizePlayer()
}
})
binding.productAdd.setOnClickListener { /* Ignored */ }
binding.productBuy.setOnClickListener { /* Ignored */ }
binding.productList.adapter = adapter
binding.player.onReady {
viewModel.initPlayer(binding.player)
}
launchUI {
viewModel.products.collect { products ->
adapter.products = products
var endId = if (isTappedState) R.id.state_tapped_normal else R.id.state_normal
var transitionId = if (isTappedState) R.id.state_tapped_metadata_to_normal else R.id.state_metadata_to_normal
var selectedProduct = viewModel.hasProductToSelect
products.firstOrNull { it.isSelected }?.let { product ->
binding.product = product
selectedProduct = true
}
if (selectedProduct) {
endId = if (isTappedState) R.id.state_tapped_metadata else R.id.state_metadata
transitionId = if (isTappedState) R.id.state_tapped_normal_to_metadata else R.id.state_normal_to_metadata
}
if (binding.motionLayout.currentState != endId && !isTransitioning && (isNormalOrMetadataState || isTappedState)) {
Timber.d("Transitioning to metadata: ${endId == R.id.state_metadata || endId == R.id.state_tapped_metadata}")
binding.motionLayout.setTransition(transitionId)
binding.motionLayout.transitionToEnd()
}
}
}
launchUI {
viewModel.onLoading.collect { isLoading ->
binding.playerLoading.animateAlpha(if (isLoading) ALPHA_VISIBLE else ALPHA_GONE)
binding.player.animateAlpha(if (isLoading) ALPHA_GONE else ALPHA_VISIBLE)
}
}
launchUI {
viewModel.onSizeChanged.collect { size ->
binding.player.zoomToFit(size)
}
}
launchUI {
viewModel.onError.collect { error ->
binding.root.showSnackBar(error.message)
}
}
}