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.
- package/NitroPlayer.podspec +6 -0
- package/README.md +115 -0
- package/android/build.gradle +8 -0
- package/android/src/main/AndroidManifest.xml +11 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridCast.kt +79 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/ExoPlayerCore.kt +10 -7
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCast.kt +122 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +13 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerSetup.kt +7 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/CastSessionController.kt +160 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/NitroCastConfig.kt +23 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/NitroCastOptionsProvider.kt +30 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/NitroMediaItemConverter.kt +53 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/PlaybackService.kt +33 -0
- package/ios/HybridCast.swift +63 -0
- package/ios/core/CastSessionManager.swift +373 -0
- package/ios/core/TrackPlayerCast.swift +109 -0
- package/ios/core/TrackPlayerCore.swift +23 -2
- package/ios/core/TrackPlayerPlayback.swift +32 -0
- package/ios/core/TrackPlayerQueue.swift +8 -1
- package/ios/core/TrackPlayerQueueBuild.swift +21 -0
- package/lib/components/CastButton.d.ts +44 -0
- package/lib/components/CastButton.js +125 -0
- package/lib/hooks/castCallbackManager.d.ts +19 -0
- package/lib/hooks/castCallbackManager.js +43 -0
- package/lib/hooks/index.d.ts +3 -0
- package/lib/hooks/index.js +3 -0
- package/lib/hooks/useCastState.d.ts +27 -0
- package/lib/hooks/useCastState.js +49 -0
- package/lib/hooks/useIsCasting.d.ts +17 -0
- package/lib/hooks/useIsCasting.js +43 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +4 -1
- package/lib/specs/Cast.nitro.d.ts +58 -0
- package/lib/specs/Cast.nitro.js +1 -0
- package/nitro.json +10 -0
- package/nitrogen/generated/android/NitroPlayer+autolinking.cmake +3 -1
- package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +18 -0
- package/nitrogen/generated/android/c++/JCastState.hpp +64 -0
- package/nitrogen/generated/android/c++/JFunc_void_CastState_std__optional_std__variant_nitro__NullType__std__string__.hpp +83 -0
- package/nitrogen/generated/android/c++/JHybridCastSpec.cpp +115 -0
- package/nitrogen/generated/android/c++/JHybridCastSpec.hpp +69 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/CastState.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string__.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridCastSpec.kt +85 -0
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.cpp +38 -13
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +176 -125
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Umbrella.hpp +8 -0
- package/nitrogen/generated/ios/NitroPlayerAutolinking.mm +8 -0
- package/nitrogen/generated/ios/NitroPlayerAutolinking.swift +12 -0
- package/nitrogen/generated/ios/c++/HybridCastSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridCastSpecSwift.hpp +133 -0
- package/nitrogen/generated/ios/swift/CastState.swift +48 -0
- package/nitrogen/generated/ios/swift/Func_void_CastState_std__optional_std__variant_nitro__NullType__std__string__.swift +65 -0
- package/nitrogen/generated/ios/swift/HybridCastSpec.swift +61 -0
- package/nitrogen/generated/ios/swift/HybridCastSpec_cxx.swift +254 -0
- package/nitrogen/generated/shared/c++/CastState.hpp +84 -0
- package/nitrogen/generated/shared/c++/HybridCastSpec.cpp +27 -0
- package/nitrogen/generated/shared/c++/HybridCastSpec.hpp +75 -0
- package/package.json +3 -3
- package/src/components/CastButton.tsx +233 -0
- package/src/hooks/castCallbackManager.ts +55 -0
- package/src/hooks/index.ts +5 -0
- package/src/hooks/useCastState.ts +67 -0
- package/src/hooks/useIsCasting.ts +47 -0
- package/src/index.ts +9 -0
- 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++/
|
|
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
|
+
}
|