react-native-nitro-player 1.4.4-alpha.0 → 1.5.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/NitroPlayer.podspec +6 -0
  2. package/README.md +115 -0
  3. package/android/build.gradle +8 -0
  4. package/android/src/main/AndroidManifest.xml +11 -0
  5. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridCast.kt +79 -0
  6. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/ExoPlayerCore.kt +10 -7
  7. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCast.kt +122 -0
  8. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +13 -0
  9. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerSetup.kt +7 -0
  10. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/CastSessionController.kt +160 -0
  11. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/NitroCastConfig.kt +23 -0
  12. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/NitroCastOptionsProvider.kt +30 -0
  13. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/NitroMediaItemConverter.kt +53 -0
  14. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/PlaybackService.kt +33 -0
  15. package/ios/HybridCast.swift +63 -0
  16. package/ios/core/CastSessionManager.swift +373 -0
  17. package/ios/core/TrackPlayerCast.swift +109 -0
  18. package/ios/core/TrackPlayerCore.swift +23 -2
  19. package/ios/core/TrackPlayerPlayback.swift +32 -0
  20. package/ios/core/TrackPlayerQueue.swift +8 -1
  21. package/ios/core/TrackPlayerQueueBuild.swift +21 -0
  22. package/lib/components/CastButton.d.ts +44 -0
  23. package/lib/components/CastButton.js +125 -0
  24. package/lib/hooks/castCallbackManager.d.ts +19 -0
  25. package/lib/hooks/castCallbackManager.js +43 -0
  26. package/lib/hooks/index.d.ts +3 -0
  27. package/lib/hooks/index.js +3 -0
  28. package/lib/hooks/useCastState.d.ts +27 -0
  29. package/lib/hooks/useCastState.js +49 -0
  30. package/lib/hooks/useIsCasting.d.ts +17 -0
  31. package/lib/hooks/useIsCasting.js +43 -0
  32. package/lib/index.d.ts +5 -0
  33. package/lib/index.js +4 -1
  34. package/lib/specs/Cast.nitro.d.ts +58 -0
  35. package/lib/specs/Cast.nitro.js +1 -0
  36. package/nitro.json +10 -0
  37. package/nitrogen/generated/android/NitroPlayer+autolinking.cmake +3 -1
  38. package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +18 -0
  39. package/nitrogen/generated/android/c++/JCastState.hpp +64 -0
  40. package/nitrogen/generated/android/c++/JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string__.hpp +83 -0
  41. package/nitrogen/generated/android/c++/JHybridCastSpec.cpp +115 -0
  42. package/nitrogen/generated/android/c++/JHybridCastSpec.hpp +69 -0
  43. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/CastState.kt +25 -0
  44. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string__.kt +80 -0
  45. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridCastSpec.kt +85 -0
  46. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.cpp +38 -13
  47. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +176 -125
  48. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Umbrella.hpp +8 -0
  49. package/nitrogen/generated/ios/NitroPlayerAutolinking.mm +8 -0
  50. package/nitrogen/generated/ios/NitroPlayerAutolinking.swift +12 -0
  51. package/nitrogen/generated/ios/c++/HybridCastSpecSwift.cpp +11 -0
  52. package/nitrogen/generated/ios/c++/HybridCastSpecSwift.hpp +133 -0
  53. package/nitrogen/generated/ios/swift/CastState.swift +48 -0
  54. package/nitrogen/generated/ios/swift/Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string__.swift +65 -0
  55. package/nitrogen/generated/ios/swift/HybridCastSpec.swift +61 -0
  56. package/nitrogen/generated/ios/swift/HybridCastSpec_cxx.swift +254 -0
  57. package/nitrogen/generated/shared/c++/CastState.hpp +84 -0
  58. package/nitrogen/generated/shared/c++/HybridCastSpec.cpp +27 -0
  59. package/nitrogen/generated/shared/c++/HybridCastSpec.hpp +75 -0
  60. package/package.json +3 -3
  61. package/src/components/CastButton.tsx +233 -0
  62. package/src/hooks/castCallbackManager.ts +55 -0
  63. package/src/hooks/index.ts +5 -0
  64. package/src/hooks/useCastState.ts +67 -0
  65. package/src/hooks/useIsCasting.ts +47 -0
  66. package/src/index.ts +9 -0
  67. package/src/specs/Cast.nitro.ts +72 -0
package/nitro.json CHANGED
@@ -47,6 +47,16 @@
47
47
  "implementationClassName": "HybridAudioRoutePicker"
48
48
  }
49
49
  },
50
+ "Cast": {
51
+ "ios": {
52
+ "language": "swift",
53
+ "implementationClassName": "HybridCast"
54
+ },
55
+ "android": {
56
+ "language": "kotlin",
57
+ "implementationClassName": "HybridCast"
58
+ }
59
+ },
50
60
  "DownloadManager": {
51
61
  "ios": {
52
62
  "language": "swift",
@@ -36,6 +36,7 @@ target_sources(
36
36
  ../nitrogen/generated/shared/c++/HybridAndroidAutoMediaLibrarySpec.cpp
37
37
  ../nitrogen/generated/shared/c++/HybridAudioDevicesSpec.cpp
38
38
  ../nitrogen/generated/shared/c++/HybridAudioRoutePickerSpec.cpp
39
+ ../nitrogen/generated/shared/c++/HybridCastSpec.cpp
39
40
  ../nitrogen/generated/shared/c++/HybridDownloadManagerSpec.cpp
40
41
  ../nitrogen/generated/shared/c++/HybridEqualizerSpec.cpp
41
42
  ../nitrogen/generated/shared/c++/HybridPlayerQueueSpec.cpp
@@ -43,8 +44,9 @@ target_sources(
43
44
  # Android-specific Nitrogen C++ sources
44
45
  ../nitrogen/generated/android/c++/JHybridAndroidAutoMediaLibrarySpec.cpp
45
46
  ../nitrogen/generated/android/c++/JHybridAudioDevicesSpec.cpp
46
- ../nitrogen/generated/android/c++/JHybridDownloadManagerSpec.cpp
47
+ ../nitrogen/generated/android/c++/JHybridCastSpec.cpp
47
48
  ../nitrogen/generated/android/c++/JVariant_NullType_String.cpp
49
+ ../nitrogen/generated/android/c++/JHybridDownloadManagerSpec.cpp
48
50
  ../nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.cpp
49
51
  ../nitrogen/generated/android/c++/JVariant_NullType_Double.cpp
50
52
  ../nitrogen/generated/android/c++/JVariant_NullType_DownloadError.cpp
@@ -17,6 +17,8 @@
17
17
 
18
18
  #include "JHybridAndroidAutoMediaLibrarySpec.hpp"
19
19
  #include "JHybridAudioDevicesSpec.hpp"
20
+ #include "JHybridCastSpec.hpp"
21
+ #include "JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string__.hpp"
20
22
  #include "JHybridDownloadManagerSpec.hpp"
21
23
  #include "JFunc_void_DownloadProgress.hpp"
22
24
  #include "JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_.hpp"
@@ -77,6 +79,14 @@ struct JHybridAudioDevicesSpecImpl: public jni::JavaClass<JHybridAudioDevicesSpe
77
79
  return javaPart->getJHybridAudioDevicesSpec();
78
80
  }
79
81
  };
82
+ struct JHybridCastSpecImpl: public jni::JavaClass<JHybridCastSpecImpl, JHybridCastSpec::JavaPart> {
83
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridCast;";
84
+ static std::shared_ptr<JHybridCastSpec> create() {
85
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridCastSpecImpl::javaobject()>();
86
+ jni::local_ref<JHybridCastSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
87
+ return javaPart->getJHybridCastSpec();
88
+ }
89
+ };
80
90
  struct JHybridDownloadManagerSpecImpl: public jni::JavaClass<JHybridDownloadManagerSpecImpl, JHybridDownloadManagerSpec::JavaPart> {
81
91
  static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridDownloadManager;";
82
92
  static std::shared_ptr<JHybridDownloadManagerSpec> create() {
@@ -101,6 +111,8 @@ void registerAllNatives() {
101
111
  // Register native JNI methods
102
112
  margelo::nitro::nitroplayer::JHybridAndroidAutoMediaLibrarySpec::CxxPart::registerNatives();
103
113
  margelo::nitro::nitroplayer::JHybridAudioDevicesSpec::CxxPart::registerNatives();
114
+ margelo::nitro::nitroplayer::JHybridCastSpec::CxxPart::registerNatives();
115
+ margelo::nitro::nitroplayer::JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string___cxx::registerNatives();
104
116
  margelo::nitro::nitroplayer::JHybridDownloadManagerSpec::CxxPart::registerNatives();
105
117
  margelo::nitro::nitroplayer::JFunc_void_DownloadProgress_cxx::registerNatives();
106
118
  margelo::nitro::nitroplayer::JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError__cxx::registerNatives();
@@ -145,6 +157,12 @@ void registerAllNatives() {
145
157
  return JHybridAudioDevicesSpecImpl::create();
146
158
  }
147
159
  );
160
+ HybridObjectRegistry::registerHybridObjectConstructor(
161
+ "Cast",
162
+ []() -> std::shared_ptr<HybridObject> {
163
+ return JHybridCastSpecImpl::create();
164
+ }
165
+ );
148
166
  HybridObjectRegistry::registerHybridObjectConstructor(
149
167
  "DownloadManager",
150
168
  []() -> std::shared_ptr<HybridObject> {
@@ -0,0 +1,64 @@
1
+ ///
2
+ /// JCastState.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "CastState.hpp"
12
+
13
+ namespace margelo::nitro::nitroplayer {
14
+
15
+ using namespace facebook;
16
+
17
+ /**
18
+ * The C++ JNI bridge between the C++ enum "CastState" and the the Kotlin enum "CastState".
19
+ */
20
+ struct JCastState final: public jni::JavaClass<JCastState> {
21
+ public:
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/CastState;";
23
+
24
+ public:
25
+ /**
26
+ * Convert this Java/Kotlin-based enum to the C++ enum CastState.
27
+ */
28
+ [[maybe_unused]]
29
+ [[nodiscard]]
30
+ CastState toCpp() const {
31
+ static const auto clazz = javaClassStatic();
32
+ static const auto fieldOrdinal = clazz->getField<int>("value");
33
+ int ordinal = this->getFieldValue(fieldOrdinal);
34
+ return static_cast<CastState>(ordinal);
35
+ }
36
+
37
+ public:
38
+ /**
39
+ * Create a Java/Kotlin-based enum with the given C++ enum's value.
40
+ */
41
+ [[maybe_unused]]
42
+ static jni::alias_ref<JCastState> fromCpp(CastState value) {
43
+ static const auto clazz = javaClassStatic();
44
+ switch (value) {
45
+ case CastState::NO_DEVICES_AVAILABLE:
46
+ static const auto fieldNO_DEVICES_AVAILABLE = clazz->getStaticField<JCastState>("NO_DEVICES_AVAILABLE");
47
+ return clazz->getStaticFieldValue(fieldNO_DEVICES_AVAILABLE);
48
+ case CastState::NOT_CONNECTED:
49
+ static const auto fieldNOT_CONNECTED = clazz->getStaticField<JCastState>("NOT_CONNECTED");
50
+ return clazz->getStaticFieldValue(fieldNOT_CONNECTED);
51
+ case CastState::CONNECTING:
52
+ static const auto fieldCONNECTING = clazz->getStaticField<JCastState>("CONNECTING");
53
+ return clazz->getStaticFieldValue(fieldCONNECTING);
54
+ case CastState::CONNECTED:
55
+ static const auto fieldCONNECTED = clazz->getStaticField<JCastState>("CONNECTED");
56
+ return clazz->getStaticFieldValue(fieldCONNECTED);
57
+ default:
58
+ std::string stringValue = std::to_string(static_cast<int>(value));
59
+ throw std::invalid_argument("Invalid enum value (" + stringValue + "!");
60
+ }
61
+ }
62
+ };
63
+
64
+ } // namespace margelo::nitro::nitroplayer
@@ -0,0 +1,83 @@
1
+ ///
2
+ /// JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string__.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include <functional>
12
+
13
+ #include "CastState.hpp"
14
+ #include <NitroModules/Null.hpp>
15
+ #include <string>
16
+ #include <variant>
17
+ #include <optional>
18
+ #include <functional>
19
+ #include <NitroModules/JNICallable.hpp>
20
+ #include "JCastState.hpp"
21
+ #include "JVariant_NullType_String.hpp"
22
+ #include <NitroModules/JNull.hpp>
23
+
24
+ namespace margelo::nitro::nitroplayer {
25
+
26
+ using namespace facebook;
27
+
28
+ /**
29
+ * Represents the Java/Kotlin callback `(state: CastState, deviceName: Variant_NullType_String?) -> Unit`.
30
+ * This can be passed around between C++ and Java/Kotlin.
31
+ */
32
+ struct JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string__: public jni::JavaClass<JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string__> {
33
+ public:
34
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string__;";
35
+
36
+ public:
37
+ /**
38
+ * Invokes the function this `JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string__` instance holds through JNI.
39
+ */
40
+ void invoke(CastState state, const std::optional<std::variant<nitro::NullType, std::string>>& deviceName) const {
41
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JCastState> /* state */, jni::alias_ref<JVariant_NullType_String> /* deviceName */)>("invoke");
42
+ method(self(), JCastState::fromCpp(state), deviceName.has_value() ? JVariant_NullType_String::fromCpp(deviceName.value()) : nullptr);
43
+ }
44
+ };
45
+
46
+ /**
47
+ * An implementation of Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string__ that is backed by a C++ implementation (using `std::function<...>`)
48
+ */
49
+ class JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string___cxx final: public jni::HybridClass<JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string___cxx, JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string__> {
50
+ public:
51
+ static jni::local_ref<JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string__::javaobject> fromCpp(const std::function<void(CastState /* state */, const std::optional<std::variant<nitro::NullType, std::string>>& /* deviceName */)>& func) {
52
+ return JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string___cxx::newObjectCxxArgs(func);
53
+ }
54
+
55
+ public:
56
+ /**
57
+ * Invokes the C++ `std::function<...>` this `JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string___cxx` instance holds.
58
+ */
59
+ void invoke_cxx(jni::alias_ref<JCastState> state, jni::alias_ref<JVariant_NullType_String> deviceName) {
60
+ _func(state->toCpp(), deviceName != nullptr ? std::make_optional(deviceName->toCpp()) : std::nullopt);
61
+ }
62
+
63
+ public:
64
+ [[nodiscard]]
65
+ inline const std::function<void(CastState /* state */, const std::optional<std::variant<nitro::NullType, std::string>>& /* deviceName */)>& getFunction() const {
66
+ return _func;
67
+ }
68
+
69
+ public:
70
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string___cxx;";
71
+ static void registerNatives() {
72
+ registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string___cxx::invoke_cxx)});
73
+ }
74
+
75
+ private:
76
+ explicit JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string___cxx(const std::function<void(CastState /* state */, const std::optional<std::variant<nitro::NullType, std::string>>& /* deviceName */)>& func): _func(func) { }
77
+
78
+ private:
79
+ friend HybridBase;
80
+ std::function<void(CastState /* state */, const std::optional<std::variant<nitro::NullType, std::string>>& /* deviceName */)> _func;
81
+ };
82
+
83
+ } // namespace margelo::nitro::nitroplayer
@@ -0,0 +1,115 @@
1
+ ///
2
+ /// JHybridCastSpec.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "JHybridCastSpec.hpp"
9
+
10
+ // Forward declaration of `CastState` to properly resolve imports.
11
+ namespace margelo::nitro::nitroplayer { enum class CastState; }
12
+
13
+ #include <NitroModules/Promise.hpp>
14
+ #include <NitroModules/JPromise.hpp>
15
+ #include <NitroModules/JUnit.hpp>
16
+ #include "CastState.hpp"
17
+ #include "JCastState.hpp"
18
+ #include <NitroModules/Null.hpp>
19
+ #include <string>
20
+ #include <variant>
21
+ #include "JVariant_NullType_String.hpp"
22
+ #include <NitroModules/JNull.hpp>
23
+ #include <optional>
24
+ #include <functional>
25
+ #include "JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string__.hpp"
26
+ #include <NitroModules/JNICallable.hpp>
27
+
28
+ namespace margelo::nitro::nitroplayer {
29
+
30
+ std::shared_ptr<JHybridCastSpec> JHybridCastSpec::JavaPart::getJHybridCastSpec() {
31
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
32
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridCastSpec>(hybridObject);
33
+ if (castHybridObject == nullptr) [[unlikely]] {
34
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridCastSpec!");
35
+ }
36
+ return castHybridObject;
37
+ }
38
+
39
+ jni::local_ref<JHybridCastSpec::CxxPart::jhybriddata> JHybridCastSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
40
+ return makeCxxInstance(jThis);
41
+ }
42
+
43
+ std::shared_ptr<JHybridObject> JHybridCastSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
44
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridCastSpec::JavaPart>(javaPart);
45
+ if (castJavaPart == nullptr) [[unlikely]] {
46
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridCastSpec::JavaPart!");
47
+ }
48
+ return std::make_shared<JHybridCastSpec>(castJavaPart);
49
+ }
50
+
51
+ void JHybridCastSpec::CxxPart::registerNatives() {
52
+ registerHybrid({
53
+ makeNativeMethod("initHybrid", JHybridCastSpec::CxxPart::initHybrid),
54
+ });
55
+ }
56
+
57
+ // Properties
58
+
59
+
60
+ // Methods
61
+ std::shared_ptr<Promise<void>> JHybridCastSpec::configure(const std::optional<std::string>& receiverApplicationId) {
62
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* receiverApplicationId */)>("configure");
63
+ auto __result = method(_javaPart, receiverApplicationId.has_value() ? jni::make_jstring(receiverApplicationId.value()) : nullptr);
64
+ return [&]() {
65
+ auto __promise = Promise<void>::create();
66
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
67
+ __promise->resolve();
68
+ });
69
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
70
+ jni::JniException __jniError(__throwable);
71
+ __promise->reject(std::make_exception_ptr(__jniError));
72
+ });
73
+ return __promise;
74
+ }();
75
+ }
76
+ bool JHybridCastSpec::isCasting() {
77
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("isCasting");
78
+ auto __result = method(_javaPart);
79
+ return static_cast<bool>(__result);
80
+ }
81
+ CastState JHybridCastSpec::getCastState() {
82
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JCastState>()>("getCastState");
83
+ auto __result = method(_javaPart);
84
+ return __result->toCpp();
85
+ }
86
+ std::variant<nitro::NullType, std::string> JHybridCastSpec::getCastDeviceName() {
87
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_String>()>("getCastDeviceName");
88
+ auto __result = method(_javaPart);
89
+ return __result->toCpp();
90
+ }
91
+ void JHybridCastSpec::showCastPicker() {
92
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void()>("showCastPicker");
93
+ method(_javaPart);
94
+ }
95
+ std::shared_ptr<Promise<void>> JHybridCastSpec::endCastSession() {
96
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("endCastSession");
97
+ auto __result = method(_javaPart);
98
+ return [&]() {
99
+ auto __promise = Promise<void>::create();
100
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
101
+ __promise->resolve();
102
+ });
103
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
104
+ jni::JniException __jniError(__throwable);
105
+ __promise->reject(std::make_exception_ptr(__jniError));
106
+ });
107
+ return __promise;
108
+ }();
109
+ }
110
+ void JHybridCastSpec::onCastStateChange(const std::function<void(CastState /* state */, const std::optional<std::variant<nitro::NullType, std::string>>& /* deviceName */)>& callback) {
111
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string__::javaobject> /* callback */)>("onCastStateChange_cxx");
112
+ method(_javaPart, JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string___cxx::fromCpp(callback));
113
+ }
114
+
115
+ } // namespace margelo::nitro::nitroplayer
@@ -0,0 +1,69 @@
1
+ ///
2
+ /// HybridCastSpec.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <NitroModules/JHybridObject.hpp>
11
+ #include <fbjni/fbjni.h>
12
+ #include "HybridCastSpec.hpp"
13
+
14
+
15
+
16
+
17
+ namespace margelo::nitro::nitroplayer {
18
+
19
+ using namespace facebook;
20
+
21
+ class JHybridCastSpec: public virtual HybridCastSpec, public virtual JHybridObject {
22
+ public:
23
+ struct JavaPart: public jni::JavaClass<JavaPart, JHybridObject::JavaPart> {
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridCastSpec;";
25
+ std::shared_ptr<JHybridCastSpec> getJHybridCastSpec();
26
+ };
27
+ struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
28
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridCastSpec$CxxPart;";
29
+ static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
30
+ static void registerNatives();
31
+ using HybridBase::HybridBase;
32
+ protected:
33
+ std::shared_ptr<JHybridObject> createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) override;
34
+ };
35
+
36
+ public:
37
+ explicit JHybridCastSpec(const jni::local_ref<JHybridCastSpec::JavaPart>& javaPart):
38
+ HybridObject(HybridCastSpec::TAG),
39
+ JHybridObject(javaPart),
40
+ _javaPart(jni::make_global(javaPart)) {}
41
+ ~JHybridCastSpec() override {
42
+ // Hermes GC can destroy JS objects on a non-JNI Thread.
43
+ jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); });
44
+ }
45
+
46
+ public:
47
+ inline const jni::global_ref<JHybridCastSpec::JavaPart>& getJavaPart() const noexcept {
48
+ return _javaPart;
49
+ }
50
+
51
+ public:
52
+ // Properties
53
+
54
+
55
+ public:
56
+ // Methods
57
+ std::shared_ptr<Promise<void>> configure(const std::optional<std::string>& receiverApplicationId) override;
58
+ bool isCasting() override;
59
+ CastState getCastState() override;
60
+ std::variant<nitro::NullType, std::string> getCastDeviceName() override;
61
+ void showCastPicker() override;
62
+ std::shared_ptr<Promise<void>> endCastSession() override;
63
+ void onCastStateChange(const std::function<void(CastState /* state */, const std::optional<std::variant<nitro::NullType, std::string>>& /* deviceName */)>& callback) override;
64
+
65
+ private:
66
+ jni::global_ref<JHybridCastSpec::JavaPart> _javaPart;
67
+ };
68
+
69
+ } // namespace margelo::nitro::nitroplayer
@@ -0,0 +1,25 @@
1
+ ///
2
+ /// CastState.kt
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ package com.margelo.nitro.nitroplayer
9
+
10
+ import androidx.annotation.Keep
11
+ import com.facebook.proguard.annotations.DoNotStrip
12
+
13
+ /**
14
+ * Represents the JavaScript enum/union "CastState".
15
+ */
16
+ @DoNotStrip
17
+ @Keep
18
+ enum class CastState(@DoNotStrip @Keep val value: Int) {
19
+ NO_DEVICES_AVAILABLE(0),
20
+ NOT_CONNECTED(1),
21
+ CONNECTING(2),
22
+ CONNECTED(3);
23
+
24
+ companion object
25
+ }
@@ -0,0 +1,80 @@
1
+ ///
2
+ /// Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string__.kt
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ package com.margelo.nitro.nitroplayer
9
+
10
+ import androidx.annotation.Keep
11
+ import com.facebook.jni.HybridData
12
+ import com.facebook.proguard.annotations.DoNotStrip
13
+ import dalvik.annotation.optimization.FastNative
14
+ import com.margelo.nitro.core.NullType
15
+
16
+ /**
17
+ * Represents the JavaScript callback `(state: enum, deviceName: optional) => void`.
18
+ * This can be either implemented in C++ (in which case it might be a callback coming from JS),
19
+ * or in Kotlin/Java (in which case it is a native callback).
20
+ */
21
+ @DoNotStrip
22
+ @Keep
23
+ @Suppress("ClassName", "RedundantUnitReturnType")
24
+ fun interface Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string__: (CastState, Variant_NullType_String?) -> Unit {
25
+ /**
26
+ * Call the given JS callback.
27
+ * @throws Throwable if the JS function itself throws an error, or if the JS function/runtime has already been deleted.
28
+ */
29
+ @DoNotStrip
30
+ @Keep
31
+ override fun invoke(state: CastState, deviceName: Variant_NullType_String?): Unit
32
+ }
33
+
34
+ /**
35
+ * Represents the JavaScript callback `(state: enum, deviceName: optional) => void`.
36
+ * This is implemented in C++, via a `std::function<...>`.
37
+ * The callback might be coming from JS.
38
+ */
39
+ @DoNotStrip
40
+ @Keep
41
+ @Suppress(
42
+ "KotlinJniMissingFunction", "unused",
43
+ "RedundantSuppression", "RedundantUnitReturnType", "FunctionName",
44
+ "ConvertSecondaryConstructorToPrimary", "ClassName", "LocalVariableName",
45
+ )
46
+ class Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string___cxx: Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string__ {
47
+ @DoNotStrip
48
+ @Keep
49
+ private val mHybridData: HybridData
50
+
51
+ @DoNotStrip
52
+ @Keep
53
+ private constructor(hybridData: HybridData) {
54
+ mHybridData = hybridData
55
+ }
56
+
57
+ @DoNotStrip
58
+ @Keep
59
+ override fun invoke(state: CastState, deviceName: Variant_NullType_String?): Unit
60
+ = invoke_cxx(state,deviceName)
61
+
62
+ @FastNative
63
+ private external fun invoke_cxx(state: CastState, deviceName: Variant_NullType_String?): Unit
64
+ }
65
+
66
+ /**
67
+ * Represents the JavaScript callback `(state: enum, deviceName: optional) => void`.
68
+ * This is implemented in Java/Kotlin, via a `(CastState, Variant_NullType_String?) -> Unit`.
69
+ * The callback is always coming from native.
70
+ */
71
+ @DoNotStrip
72
+ @Keep
73
+ @Suppress("ClassName", "RedundantUnitReturnType", "unused")
74
+ class Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string___java(private val function: (CastState, Variant_NullType_String?) -> Unit): Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string__ {
75
+ @DoNotStrip
76
+ @Keep
77
+ override fun invoke(state: CastState, deviceName: Variant_NullType_String?): Unit {
78
+ return this.function(state, deviceName)
79
+ }
80
+ }
@@ -0,0 +1,85 @@
1
+ ///
2
+ /// HybridCastSpec.kt
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ package com.margelo.nitro.nitroplayer
9
+
10
+ import androidx.annotation.Keep
11
+ import com.facebook.jni.HybridData
12
+ import com.facebook.proguard.annotations.DoNotStrip
13
+ import com.margelo.nitro.core.Promise
14
+ import com.margelo.nitro.core.NullType
15
+ import com.margelo.nitro.core.HybridObject
16
+
17
+ /**
18
+ * A Kotlin class representing the Cast HybridObject.
19
+ * Implement this abstract class to create Kotlin-based instances of Cast.
20
+ */
21
+ @DoNotStrip
22
+ @Keep
23
+ @Suppress(
24
+ "KotlinJniMissingFunction", "unused",
25
+ "RedundantSuppression", "RedundantUnitReturnType", "SimpleRedundantLet",
26
+ "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName"
27
+ )
28
+ abstract class HybridCastSpec: HybridObject() {
29
+ // Properties
30
+
31
+
32
+ // Methods
33
+ @DoNotStrip
34
+ @Keep
35
+ abstract fun configure(receiverApplicationId: String?): Promise<Unit>
36
+
37
+ @DoNotStrip
38
+ @Keep
39
+ abstract fun isCasting(): Boolean
40
+
41
+ @DoNotStrip
42
+ @Keep
43
+ abstract fun getCastState(): CastState
44
+
45
+ @DoNotStrip
46
+ @Keep
47
+ abstract fun getCastDeviceName(): Variant_NullType_String
48
+
49
+ @DoNotStrip
50
+ @Keep
51
+ abstract fun showCastPicker(): Unit
52
+
53
+ @DoNotStrip
54
+ @Keep
55
+ abstract fun endCastSession(): Promise<Unit>
56
+
57
+ abstract fun onCastStateChange(callback: (state: CastState, deviceName: Variant_NullType_String?) -> Unit): Unit
58
+
59
+ @DoNotStrip
60
+ @Keep
61
+ private fun onCastStateChange_cxx(callback: Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string__): Unit {
62
+ val __result = onCastStateChange(callback)
63
+ return __result
64
+ }
65
+
66
+ // Default implementation of `HybridObject.toString()`
67
+ override fun toString(): String {
68
+ return "[HybridObject Cast]"
69
+ }
70
+
71
+ // C++ backing class
72
+ @DoNotStrip
73
+ @Keep
74
+ protected open class CxxPart(javaPart: HybridCastSpec): HybridObject.CxxPart(javaPart) {
75
+ // C++ JHybridCastSpec::CxxPart::initHybrid(...)
76
+ external override fun initHybrid(): HybridData
77
+ }
78
+ override fun createCxxPart(): CxxPart {
79
+ return CxxPart(this)
80
+ }
81
+
82
+ companion object {
83
+ protected const val TAG = "HybridCastSpec"
84
+ }
85
+ }