Scaffold player

This commit is contained in:
2026-04-09 18:38:04 +02:00
parent e1e2fa3f3b
commit 014c75d575
9 changed files with 120 additions and 57 deletions
@@ -1,27 +0,0 @@
package dev.zoriya.omni
import android.graphics.Color
import android.view.View
import androidx.annotation.Keep
import com.facebook.proguard.annotations.DoNotStrip
import com.facebook.react.uimanager.ThemedReactContext
import com.margelo.nitro.omni.HybridOmniSpec
@Keep
@DoNotStrip
class HybridOmni(val context: ThemedReactContext): HybridOmniSpec() {
// View
override val view: View = View(context)
// Props
private var _isRed = false
override var isRed: Boolean
get() = _isRed
set(value) {
_isRed = value
view.setBackgroundColor(
if (value) Color.RED
else Color.BLACK
)
}
}
@@ -16,7 +16,7 @@ public class OmniPackage : BaseReactPackage() {
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
val viewManagers = ArrayList<ViewManager<*, *>>()
viewManagers.add(HybridOmniManager())
viewManagers.add(HybridOmniViewManager())
return viewManagers
}
@@ -0,0 +1,76 @@
package dev.zoriya.omni
import com.margelo.nitro.omni.HybridOmniPlayerPropsSpec
import com.margelo.nitro.omni.HybridOmniPlayerSpec
import com.margelo.nitro.omni.PlayerStatus
import com.margelo.nitro.omni.Rendition
import com.margelo.nitro.omni.Track
import com.margelo.nitro.omni.Variant_NullType_Rendition
class OmniPlayer(source: HybridOmniPlayerPropsSpec) : HybridOmniPlayerSpec() {
override val hasPrev: Boolean
get() = TODO("Not yet implemented")
override val hasNext: Boolean
get() = TODO("Not yet implemented")
override val status: PlayerStatus
get() = TODO("Not yet implemented")
override val isPlaying: Boolean
get() = TODO("Not yet implemented")
override var currentTime: Double
get() = TODO("Not yet implemented")
set(value) {}
override val buffered: Double
get() = TODO("Not yet implemented")
override val duration: Double
get() = TODO("Not yet implemented")
override var playbackRate: Double
get() = TODO("Not yet implemented")
set(value) {}
override var volume: Double
get() = TODO("Not yet implemented")
set(value) {}
override val videos: Array<Track>
get() = TODO("Not yet implemented")
override val audios: Array<Track>
get() = TODO("Not yet implemented")
override val subtitles: Array<Track>
get() = TODO("Not yet implemented")
override val rendition: Array<Rendition>
get() = TODO("Not yet implemented")
override fun play() {
TODO("Not yet implemented")
}
override fun pause() {
TODO("Not yet implemented")
}
override fun seekBy(offset: Double) {
TODO("Not yet implemented")
}
override fun playPrev() {
TODO("Not yet implemented")
}
override fun playNext() {
TODO("Not yet implemented")
}
override fun selectVideo(video: Track) {
TODO("Not yet implemented")
}
override fun selectAudio(audio: Track) {
TODO("Not yet implemented")
}
override fun selectSubtitle(subtitle: Track) {
TODO("Not yet implemented")
}
override fun selectRendition(rendition: Variant_NullType_Rendition?) {
TODO("Not yet implemented")
}
}
+12
View File
@@ -0,0 +1,12 @@
package dev.zoriya.omni
import com.facebook.react.uimanager.ThemedReactContext
import com.margelo.nitro.omni.HybridOmniPlayerFactorySpec
import com.margelo.nitro.omni.HybridOmniPlayerPropsSpec
import com.margelo.nitro.omni.HybridOmniPlayerSpec
class OmniPlayerFactory(val context: ThemedReactContext): HybridOmniPlayerFactorySpec() {
override fun createPlayer(props: HybridOmniPlayerPropsSpec): HybridOmniPlayerSpec {
return OmniPlayer(props)
}
}
+22
View File
@@ -0,0 +1,22 @@
package dev.zoriya.omni
import android.graphics.Color
import android.view.View
import com.facebook.react.uimanager.ThemedReactContext
import com.margelo.nitro.omni.HybridOmniViewSpec
class OmniView(val context: ThemedReactContext) : HybridOmniViewSpec() {
// View
override val view: View = View(context)
// Props
override var autoplay: Boolean?
get() = TODO("Not yet implemented")
set(value) {}
override var showNotification: Boolean?
get() = TODO("Not yet implemented")
set(value) {}
override var autoPip: Boolean?
get() = TODO("Not yet implemented")
set(value) {}
}
+2 -8
View File
@@ -12,19 +12,13 @@
"OmniView": {
"android": {
"language": "kotlin",
"implementationClassName": "OmniView"
}
},
"OmniPlayer": {
"android": {
"language": "kotlin",
"implementationClassName": "OmniPlayer"
"implementationClassName": "HybridOmniView"
}
},
"OmniPlayerFactory": {
"android": {
"language": "kotlin",
"implementationClassName": "OmniPlayerFactory"
"implementationClassName": "HybridOmniPlayerFactory"
}
}
},
+2 -16
View File
@@ -31,23 +31,15 @@ int initialize(JavaVM* vm) {
}
struct JHybridOmniViewSpecImpl: public jni::JavaClass<JHybridOmniViewSpecImpl, JHybridOmniViewSpec::JavaPart> {
static constexpr auto kJavaDescriptor = "Ldev/zoriya/omni/OmniView;";
static constexpr auto kJavaDescriptor = "Ldev/zoriya/omni/HybridOmniView;";
static std::shared_ptr<JHybridOmniViewSpec> create() {
static const auto constructorFn = javaClassStatic()->getConstructor<JHybridOmniViewSpecImpl::javaobject()>();
jni::local_ref<JHybridOmniViewSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
return javaPart->getJHybridOmniViewSpec();
}
};
struct JHybridOmniPlayerSpecImpl: public jni::JavaClass<JHybridOmniPlayerSpecImpl, JHybridOmniPlayerSpec::JavaPart> {
static constexpr auto kJavaDescriptor = "Ldev/zoriya/omni/OmniPlayer;";
static std::shared_ptr<JHybridOmniPlayerSpec> create() {
static const auto constructorFn = javaClassStatic()->getConstructor<JHybridOmniPlayerSpecImpl::javaobject()>();
jni::local_ref<JHybridOmniPlayerSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
return javaPart->getJHybridOmniPlayerSpec();
}
};
struct JHybridOmniPlayerFactorySpecImpl: public jni::JavaClass<JHybridOmniPlayerFactorySpecImpl, JHybridOmniPlayerFactorySpec::JavaPart> {
static constexpr auto kJavaDescriptor = "Ldev/zoriya/omni/OmniPlayerFactory;";
static constexpr auto kJavaDescriptor = "Ldev/zoriya/omni/HybridOmniPlayerFactory;";
static std::shared_ptr<JHybridOmniPlayerFactorySpec> create() {
static const auto constructorFn = javaClassStatic()->getConstructor<JHybridOmniPlayerFactorySpecImpl::javaobject()>();
jni::local_ref<JHybridOmniPlayerFactorySpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
@@ -73,12 +65,6 @@ void registerAllNatives() {
return JHybridOmniViewSpecImpl::create();
}
);
HybridObjectRegistry::registerHybridObjectConstructor(
"OmniPlayer",
[]() -> std::shared_ptr<HybridObject> {
return JHybridOmniPlayerSpecImpl::create();
}
);
HybridObjectRegistry::registerHybridObjectConstructor(
"OmniPlayerFactory",
[]() -> std::shared_ptr<HybridObject> {
@@ -21,7 +21,7 @@ import dev.zoriya.omni.*
*/
public class HybridOmniViewManager: SimpleViewManager<View>() {
init {
if (RecyclableView::class.java.isAssignableFrom(OmniView::class.java)) {
if (RecyclableView::class.java.isAssignableFrom(HybridOmniView::class.java)) {
// Enable view recycling
super.setupViewRecycling()
}
@@ -32,7 +32,7 @@ public class HybridOmniViewManager: SimpleViewManager<View>() {
}
override fun createViewInstance(reactContext: ThemedReactContext): View {
val hybridView = OmniView(reactContext)
val hybridView = HybridOmniView(reactContext)
val view = hybridView.view
view.setTag(associated_hybrid_view_tag, hybridView)
return view
@@ -74,7 +74,7 @@ public class HybridOmniViewManager: SimpleViewManager<View>() {
}
}
private fun getHybridView(view: View): OmniView? {
return view.getTag(associated_hybrid_view_tag) as? OmniView
private fun getHybridView(view: View): HybridOmniView? {
return view.getTag(associated_hybrid_view_tag) as? HybridOmniView
}
}
+1 -1
View File
@@ -23,7 +23,7 @@ in
nodejs
biome
jdk
(android-studio.withSdk android.androidsdk)
((android-studio.withSdk android.androidsdk).overrideAttrs {forceWayland = true;})
];
shellHook = ''