package com.applicaster.oasisplayer import android.content.Context import android.util.Log import android.view.KeyEvent import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.constraintlayout.widget.ConstraintLayout import com.applicaster.oasisplayer.player.* import com.applicaster.plugin_manager.dependencyplugin.playerplugin.PlayerSenderPlugin import com.applicaster.quickbrickplayerplugin.quickbrickInterface.QuickBrickPlayer import com.facebook.react.bridge.ReadableMap import com.facebook.react.uimanager.ThemedReactContext import kotlinx.android.synthetic.main.view_player_holder.view.* class OasisContainerView(context: Context): ConstraintLayout(context), QuickBrickPlayer, KeyEvent.Callback, PlayerSenderPlugin { var player: OasisPlayerViewHolder? = null init { val playerView: OasisPlayerViewHolder = LayoutInflater.from(context) .inflate(R.layout.view_player_holder, null) as OasisPlayerViewHolder val matchParentLayoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) this.addView(playerView, matchParentLayoutParams) player = playerView } override fun setPlayableItem(source: ReadableMap) { Log.d("QB-Oasis", "QB-Oasis setPlayableItem $source") val screen = object : PlayerScreen { override fun getLifecycle() = null override fun getActivity() = (context as? ThemedReactContext)?.currentActivity override fun finish() {} } val playableMap = source.toHashMap() player?.initPlayer(playerScreen = screen, playMode = PlayMode.INLINE, playableMap = playableMap) // startPlayerActivity((context as? ThemedReactContext)?.currentActivity, playableMap) } override fun setPlayerState(state: String?) { Log.d("QB-Oasis", "QB-Oasis setPlayerState $state") } override fun getPlayerView(): View { return this } override lateinit var entry: Map override var pluginPlayerContainer: Any? = null override lateinit var playerObject: Any override lateinit var senderView: View override lateinit var senderMediaSource: Any override lateinit var senderAdsUrl: String override fun playbackDuration(): Long { return 0 } override fun playbackPosition(): Long { return 0 } override fun pluggablePlayerPause() { } override fun pluggablePlayerResume() { } private val measureAndLayout: Runnable? = Runnable { measure( MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)) layout(left, top, right, bottom) } override fun requestLayout() { super.requestLayout() // The spinner relies on a measure + layout pass happening after it calls requestLayout(). // Without this, the widget never actually changes the selection and doesn't call the // appropriate listeners. Since we override onLayout in our ViewGroups, a layout pass never // happens after a call to requestLayout, so we simulate one here. post(measureAndLayout) } }