refactor: internal refactor for prepare new arch (#3980)
* chore(js): fix typo * refactor(js): refactor type code for codegen * refactor(js): refactor Video component - parse shutterColor value within JS - remove internal fullscreen state * chore(js): add deprecation warning comment * fix(js): fix return type * fix(js): fix import path * refactor(android): apply changed API for new arch * refactor(ios): apply changed API for new arch * fix(ios): fix wrong name * refactor: refactor VideoDecoderProperties - rename and add wrapper * refactor(android): Code fixes for backward compatibility with Kotlin
This commit is contained in:
@@ -47,7 +47,7 @@ enum class EventTypes(val eventName: String) {
|
||||
companion object {
|
||||
fun toMap() =
|
||||
mutableMapOf<String, Any>().apply {
|
||||
EventTypes.entries.forEach { eventType ->
|
||||
EventTypes.values().toList().forEach { eventType ->
|
||||
put("top${eventType.eventName.removePrefix("on")}", mapOf("registrationName" to eventType.eventName))
|
||||
}
|
||||
}
|
||||
|
@@ -7,7 +7,6 @@ import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.media3.common.util.Util;
|
||||
|
||||
import com.brentvatne.common.api.BufferConfig;
|
||||
import com.brentvatne.common.api.BufferingStrategy;
|
||||
@@ -203,7 +202,7 @@ public class ReactExoplayerViewManager extends ViewGroupManager<ReactExoplayerVi
|
||||
}
|
||||
|
||||
@ReactProp(name = PROP_TEXT_TRACKS)
|
||||
public void setPropTextTracks(final ReactExoplayerView videoView,
|
||||
public void setTextTracks(final ReactExoplayerView videoView,
|
||||
@Nullable ReadableArray textTracks) {
|
||||
SideLoadedTextTrackList sideLoadedTextTracks = SideLoadedTextTrackList.Companion.parse(textTracks);
|
||||
videoView.setTextTracks(sideLoadedTextTracks);
|
||||
@@ -245,12 +244,12 @@ public class ReactExoplayerViewManager extends ViewGroupManager<ReactExoplayerVi
|
||||
}
|
||||
|
||||
@ReactProp(name = PROP_MAXIMUM_BIT_RATE)
|
||||
public void setMaxBitRate(final ReactExoplayerView videoView, final int maxBitRate) {
|
||||
videoView.setMaxBitRateModifier(maxBitRate);
|
||||
public void setMaxBitRate(final ReactExoplayerView videoView, final float maxBitRate) {
|
||||
videoView.setMaxBitRateModifier((int)maxBitRate);
|
||||
}
|
||||
|
||||
@ReactProp(name = PROP_MIN_LOAD_RETRY_COUNT)
|
||||
public void minLoadRetryCount(final ReactExoplayerView videoView, final int minLoadRetryCount) {
|
||||
public void setMinLoadRetryCount(final ReactExoplayerView videoView, final int minLoadRetryCount) {
|
||||
videoView.setMinLoadRetryCountModifier(minLoadRetryCount);
|
||||
}
|
||||
|
||||
@@ -310,12 +309,11 @@ public class ReactExoplayerViewManager extends ViewGroupManager<ReactExoplayerVi
|
||||
videoView.setSubtitleStyle(SubtitleStyle.parse(src));
|
||||
}
|
||||
|
||||
@ReactProp(name = PROP_SHUTTER_COLOR, customType = "Color")
|
||||
public void setShutterColor(final ReactExoplayerView videoView, final Integer color) {
|
||||
videoView.setShutterColor(color == null ? Color.BLACK : color);
|
||||
@ReactProp(name = PROP_SHUTTER_COLOR, defaultInt = 0)
|
||||
public void setShutterColor(final ReactExoplayerView videoView, final int color) {
|
||||
videoView.setShutterColor(color == 0 ? Color.BLACK : color);
|
||||
}
|
||||
|
||||
|
||||
@ReactProp(name = PROP_BUFFER_CONFIG)
|
||||
public void setBufferConfig(final ReactExoplayerView videoView, @Nullable ReadableMap bufferConfig) {
|
||||
BufferConfig config = BufferConfig.parse(bufferConfig);
|
||||
|
@@ -13,7 +13,7 @@ class ReactVideoPackage(private val config: ReactExoplayerConfig? = null) : Reac
|
||||
|
||||
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> =
|
||||
listOf(
|
||||
VideoDecoderPropertiesModule(reactContext),
|
||||
VideoDecoderInfoModule(reactContext),
|
||||
VideoManagerModule(reactContext)
|
||||
)
|
||||
|
||||
|
@@ -11,7 +11,7 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule
|
||||
import com.facebook.react.bridge.ReactMethod
|
||||
import java.util.UUID
|
||||
|
||||
class VideoDecoderPropertiesModule(reactContext: ReactApplicationContext?) : ReactContextBaseJavaModule(reactContext) {
|
||||
class VideoDecoderInfoModule(reactContext: ReactApplicationContext?) : ReactContextBaseJavaModule(reactContext) {
|
||||
override fun getName(): String = REACT_CLASS
|
||||
|
||||
@ReactMethod
|
||||
@@ -37,36 +37,36 @@ class VideoDecoderPropertiesModule(reactContext: ReactApplicationContext?) : Rea
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun isCodecSupported(mimeType: String?, width: Int, height: Int, p: Promise) {
|
||||
fun isCodecSupported(mimeType: String?, width: Double, height: Double, p: Promise?) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||
p.resolve("unsupported")
|
||||
p?.resolve("unsupported")
|
||||
return
|
||||
}
|
||||
val mRegularCodecs = MediaCodecList(MediaCodecList.REGULAR_CODECS)
|
||||
val format = MediaFormat.createVideoFormat(mimeType!!, width, height)
|
||||
val format = MediaFormat.createVideoFormat(mimeType!!, width.toInt(), height.toInt())
|
||||
val codecName = mRegularCodecs.findDecoderForFormat(format)
|
||||
if (codecName == null) {
|
||||
p.resolve("unsupported")
|
||||
p?.resolve("unsupported")
|
||||
return
|
||||
}
|
||||
|
||||
// Fallback for android < 10
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
|
||||
p.resolve("software")
|
||||
p?.resolve("software")
|
||||
return
|
||||
}
|
||||
val isHardwareAccelerated = mRegularCodecs.codecInfos.any {
|
||||
it.name.equals(codecName, ignoreCase = true) && it.isHardwareAccelerated
|
||||
}
|
||||
p.resolve(if (isHardwareAccelerated) "software" else "hardware")
|
||||
p?.resolve(if (isHardwareAccelerated) "software" else "hardware")
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun isHEVCSupported(p: Promise) = isCodecSupported("video/hevc", 1920, 1080, p)
|
||||
fun isHEVCSupported(p: Promise) = isCodecSupported("video/hevc", 1920.0, 1080.0, p)
|
||||
|
||||
companion object {
|
||||
private val WIDEVINE_UUID = UUID(-0x121074568629b532L, -0x5c37d8232ae2de13L)
|
||||
private const val SECURITY_LEVEL_PROPERTY = "securityLevel"
|
||||
private const val REACT_CLASS = "VideoDecoderProperties"
|
||||
private const val REACT_CLASS = "VideoDecoderInfoModule"
|
||||
}
|
||||
}
|
@@ -1,12 +1,10 @@
|
||||
package com.brentvatne.react
|
||||
|
||||
import com.brentvatne.common.toolbox.ReactBridgeUtils
|
||||
import com.brentvatne.exoplayer.ReactExoplayerView
|
||||
import com.facebook.react.bridge.Promise
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
||||
import com.facebook.react.bridge.ReactMethod
|
||||
import com.facebook.react.bridge.ReadableMap
|
||||
import com.facebook.react.bridge.UiThreadUtil
|
||||
import com.facebook.react.uimanager.UIManagerHelper
|
||||
import com.facebook.react.uimanager.common.UIManagerType
|
||||
@@ -37,31 +35,33 @@ class VideoManagerModule(reactContext: ReactApplicationContext?) : ReactContextB
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun setPlayerPauseState(paused: Boolean?, reactTag: Int) {
|
||||
fun setPlayerPauseStateCmd(reactTag: Int, paused: Boolean?) {
|
||||
performOnPlayerView(reactTag) {
|
||||
it?.setPausedModifier(paused!!)
|
||||
}
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun seek(info: ReadableMap, reactTag: Int) {
|
||||
if (!info.hasKey("time")) {
|
||||
return
|
||||
}
|
||||
|
||||
val time = ReactBridgeUtils.safeGetInt(info, "time")
|
||||
fun seekCmd(reactTag: Int, time: Float, tolerance: Float) {
|
||||
performOnPlayerView(reactTag) {
|
||||
it?.seekTo((time * 1000f).roundToInt().toLong())
|
||||
}
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun setVolume(volume: Float, reactTag: Int) {
|
||||
fun setVolumeCmd(reactTag: Int, volume: Float) {
|
||||
performOnPlayerView(reactTag) {
|
||||
it?.setVolumeModifier(volume)
|
||||
}
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun setFullScreenCmd(reactTag: Int, fullScreen: Boolean) {
|
||||
performOnPlayerView(reactTag) {
|
||||
it?.setFullscreen(fullScreen)
|
||||
}
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun getCurrentPosition(reactTag: Int, promise: Promise) {
|
||||
performOnPlayerView(reactTag) {
|
||||
@@ -69,13 +69,6 @@ class VideoManagerModule(reactContext: ReactApplicationContext?) : ReactContextB
|
||||
}
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun setFullScreen(fullScreen: Boolean, reactTag: Int) {
|
||||
performOnPlayerView(reactTag) {
|
||||
it?.setFullscreen(fullScreen)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val REACT_CLASS = "VideoManager"
|
||||
}
|
||||
|
Reference in New Issue
Block a user