react-native-tpstreams 0.1.6 → 0.1.7
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/LICENSE +20 -20
- package/README.md +49 -49
- package/Tpstreams.podspec +42 -42
- package/android/build.gradle +122 -122
- package/android/gradle.properties +5 -5
- package/android/libs/extracted-aar/META-INF/com/android/build/gradle/aar-metadata.properties +4 -0
- package/android/src/main/AndroidManifest.xml +4 -4
- package/android/src/main/AndroidManifestNew.xml +2 -2
- package/android/src/main/java/com/tpstreams/FragmentModule.kt +190 -190
- package/android/src/main/java/com/tpstreams/PlayerFragment.kt +163 -96
- package/android/src/main/java/com/tpstreams/TpStreamsPlayerView.kt +79 -79
- package/android/src/main/java/com/tpstreams/TpStreamsPlayerViewManager.kt +40 -40
- package/android/src/main/java/com/tpstreams/TpstreamsModule.kt +138 -25
- package/android/src/main/java/com/tpstreams/TpstreamsPackage.kt +16 -16
- package/android/src/main/res/layout/fragment_player.xml +28 -28
- package/android/src/main/res/xml/network_security_config.xml +7 -7
- package/ios/Tpstreams.h +6 -6
- package/ios/Tpstreams.mm +18 -18
- package/lib/commonjs/NativeTpstreams.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/NativeTpstreams.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/package.json +203 -203
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
package com.tpstreams
|
|
2
|
-
|
|
3
|
-
import kotlinx.coroutines.*
|
|
4
|
-
import android.content.Context
|
|
5
|
-
import android.util.AttributeSet
|
|
6
|
-
import android.widget.FrameLayout
|
|
7
|
-
import androidx.fragment.app.FragmentActivity
|
|
8
|
-
import com.facebook.react.bridge.ReactApplicationContext
|
|
9
|
-
import com.facebook.react.uimanager.ThemedReactContext
|
|
10
|
-
|
|
11
|
-
class TpStreamsPlayerView @JvmOverloads constructor(
|
|
12
|
-
context: Context,
|
|
13
|
-
attrs: AttributeSet? = null
|
|
14
|
-
) : FrameLayout(context, attrs), CoroutineScope {
|
|
15
|
-
|
|
16
|
-
private var videoId: String? = null
|
|
17
|
-
private var accessToken: String? = null
|
|
18
|
-
private var enableDownload: Boolean = true
|
|
19
|
-
private var autoPlay :Boolean = true
|
|
20
|
-
private var fragmentModule: FragmentModule? = null
|
|
21
|
-
|
|
22
|
-
private val job = SupervisorJob()
|
|
23
|
-
override val coroutineContext = Dispatchers.Main + job
|
|
24
|
-
private var updateJob: Job? = null
|
|
25
|
-
|
|
26
|
-
init {
|
|
27
|
-
if (context is ThemedReactContext) {
|
|
28
|
-
val reactContext = context.reactApplicationContext
|
|
29
|
-
val activity = context.currentActivity as? FragmentActivity
|
|
30
|
-
|
|
31
|
-
if (activity != null) {
|
|
32
|
-
fragmentModule = FragmentModule(reactContext)
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
fun setVideoId(id: String) {
|
|
38
|
-
videoId = id
|
|
39
|
-
updateFragment()
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
fun setAccessToken(token: String) {
|
|
43
|
-
accessToken = token
|
|
44
|
-
updateFragment()
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
fun setEnableDownload(enableDownload: Boolean?) {
|
|
48
|
-
this.enableDownload = enableDownload ?: true
|
|
49
|
-
updateFragment()
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
fun setAutoPlay(autoPlay: Boolean?) {
|
|
53
|
-
this.autoPlay = autoPlay ?: true
|
|
54
|
-
updateFragment()
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
private fun updateFragment() {
|
|
58
|
-
if (!videoId.isNullOrEmpty() && !accessToken.isNullOrEmpty()) {
|
|
59
|
-
updateJob?.cancel()
|
|
60
|
-
updateJob = launch {
|
|
61
|
-
delay(50)
|
|
62
|
-
fragmentModule?.closeCustomFragment()
|
|
63
|
-
fragmentModule?.showCustomFragment(
|
|
64
|
-
videoId!!,
|
|
65
|
-
accessToken!!,
|
|
66
|
-
enableDownload,
|
|
67
|
-
autoPlay ?: true
|
|
68
|
-
)
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
override fun onDetachedFromWindow() {
|
|
74
|
-
super.onDetachedFromWindow()
|
|
75
|
-
coroutineContext.cancel()
|
|
76
|
-
fragmentModule?.closeCustomFragment()
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
}
|
|
1
|
+
package com.tpstreams
|
|
2
|
+
|
|
3
|
+
import kotlinx.coroutines.*
|
|
4
|
+
import android.content.Context
|
|
5
|
+
import android.util.AttributeSet
|
|
6
|
+
import android.widget.FrameLayout
|
|
7
|
+
import androidx.fragment.app.FragmentActivity
|
|
8
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
9
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
10
|
+
|
|
11
|
+
class TpStreamsPlayerView @JvmOverloads constructor(
|
|
12
|
+
context: Context,
|
|
13
|
+
attrs: AttributeSet? = null
|
|
14
|
+
) : FrameLayout(context, attrs), CoroutineScope {
|
|
15
|
+
|
|
16
|
+
private var videoId: String? = null
|
|
17
|
+
private var accessToken: String? = null
|
|
18
|
+
private var enableDownload: Boolean = true
|
|
19
|
+
private var autoPlay :Boolean = true
|
|
20
|
+
private var fragmentModule: FragmentModule? = null
|
|
21
|
+
|
|
22
|
+
private val job = SupervisorJob()
|
|
23
|
+
override val coroutineContext = Dispatchers.Main + job
|
|
24
|
+
private var updateJob: Job? = null
|
|
25
|
+
|
|
26
|
+
init {
|
|
27
|
+
if (context is ThemedReactContext) {
|
|
28
|
+
val reactContext = context.reactApplicationContext
|
|
29
|
+
val activity = context.currentActivity as? FragmentActivity
|
|
30
|
+
|
|
31
|
+
if (activity != null) {
|
|
32
|
+
fragmentModule = FragmentModule(reactContext)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
fun setVideoId(id: String) {
|
|
38
|
+
videoId = id
|
|
39
|
+
updateFragment()
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
fun setAccessToken(token: String) {
|
|
43
|
+
accessToken = token
|
|
44
|
+
updateFragment()
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
fun setEnableDownload(enableDownload: Boolean?) {
|
|
48
|
+
this.enableDownload = enableDownload ?: true
|
|
49
|
+
updateFragment()
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
fun setAutoPlay(autoPlay: Boolean?) {
|
|
53
|
+
this.autoPlay = autoPlay ?: true
|
|
54
|
+
updateFragment()
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
private fun updateFragment() {
|
|
58
|
+
if (!videoId.isNullOrEmpty() && !accessToken.isNullOrEmpty()) {
|
|
59
|
+
updateJob?.cancel()
|
|
60
|
+
updateJob = launch {
|
|
61
|
+
delay(50)
|
|
62
|
+
fragmentModule?.closeCustomFragment()
|
|
63
|
+
fragmentModule?.showCustomFragment(
|
|
64
|
+
videoId!!,
|
|
65
|
+
accessToken!!,
|
|
66
|
+
enableDownload,
|
|
67
|
+
autoPlay ?: true
|
|
68
|
+
)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
override fun onDetachedFromWindow() {
|
|
74
|
+
super.onDetachedFromWindow()
|
|
75
|
+
coroutineContext.cancel()
|
|
76
|
+
fragmentModule?.closeCustomFragment()
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
}
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
package com.tpstreams
|
|
2
|
-
|
|
3
|
-
import com.facebook.react.uimanager.SimpleViewManager
|
|
4
|
-
import com.facebook.react.uimanager.ThemedReactContext
|
|
5
|
-
import com.facebook.react.uimanager.annotations.ReactProp
|
|
6
|
-
|
|
7
|
-
class TpStreamsPlayerViewManager : SimpleViewManager<TpStreamsPlayerView>() {
|
|
8
|
-
|
|
9
|
-
override fun getName() = "TpStreamsPlayerView"
|
|
10
|
-
|
|
11
|
-
override fun createViewInstance(reactContext : ThemedReactContext) :TpStreamsPlayerView {
|
|
12
|
-
return TpStreamsPlayerView(reactContext)
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
@ReactProp(name = "videoId")
|
|
16
|
-
fun setVideoId(view: TpStreamsPlayerView, videoId: String?) {
|
|
17
|
-
videoId?.let { view.setVideoId(it) }
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
@ReactProp(name = "accessToken")
|
|
21
|
-
fun setAccessToken(view: TpStreamsPlayerView, accessToken: String?) {
|
|
22
|
-
accessToken?.let { view.setAccessToken(it) }
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
@ReactProp(name = "enableDownload")
|
|
26
|
-
fun setEnableDownload(view: TpStreamsPlayerView, enableDownload: Boolean?) {
|
|
27
|
-
view.setEnableDownload(enableDownload)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
@ReactProp(name = "autoPlay")
|
|
31
|
-
fun setAutoPlay(view: TpStreamsPlayerView, autoPlay: Boolean?) {
|
|
32
|
-
view.setAutoPlay(autoPlay)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
1
|
+
package com.tpstreams
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.uimanager.SimpleViewManager
|
|
4
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
5
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
6
|
+
|
|
7
|
+
class TpStreamsPlayerViewManager : SimpleViewManager<TpStreamsPlayerView>() {
|
|
8
|
+
|
|
9
|
+
override fun getName() = "TpStreamsPlayerView"
|
|
10
|
+
|
|
11
|
+
override fun createViewInstance(reactContext : ThemedReactContext) :TpStreamsPlayerView {
|
|
12
|
+
return TpStreamsPlayerView(reactContext)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@ReactProp(name = "videoId")
|
|
16
|
+
fun setVideoId(view: TpStreamsPlayerView, videoId: String?) {
|
|
17
|
+
videoId?.let { view.setVideoId(it) }
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@ReactProp(name = "accessToken")
|
|
21
|
+
fun setAccessToken(view: TpStreamsPlayerView, accessToken: String?) {
|
|
22
|
+
accessToken?.let { view.setAccessToken(it) }
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@ReactProp(name = "enableDownload")
|
|
26
|
+
fun setEnableDownload(view: TpStreamsPlayerView, enableDownload: Boolean?) {
|
|
27
|
+
view.setEnableDownload(enableDownload)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@ReactProp(name = "autoPlay")
|
|
31
|
+
fun setAutoPlay(view: TpStreamsPlayerView, autoPlay: Boolean?) {
|
|
32
|
+
view.setAutoPlay(autoPlay)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
@@ -1,25 +1,138 @@
|
|
|
1
|
-
package com.tpstreams
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import com.facebook.react.bridge.
|
|
6
|
-
import com.facebook.react.
|
|
7
|
-
import com.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
1
|
+
package com.tpstreams
|
|
2
|
+
|
|
3
|
+
import android.os.Handler
|
|
4
|
+
import android.os.Looper
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
7
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
8
|
+
import com.facebook.react.bridge.ReactMethod
|
|
9
|
+
import com.tpstream.player.TPStreamsSDK
|
|
10
|
+
import com.facebook.react.bridge.Promise
|
|
11
|
+
import com.facebook.react.bridge.Arguments
|
|
12
|
+
|
|
13
|
+
@ReactModule(name = TpstreamsModule.NAME)
|
|
14
|
+
class TpstreamsModule(reactContext: ReactApplicationContext) :
|
|
15
|
+
ReactContextBaseJavaModule(reactContext) {
|
|
16
|
+
|
|
17
|
+
init {
|
|
18
|
+
companionReactContext = reactContext
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
override fun getName(): String {
|
|
22
|
+
return NAME
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@ReactMethod
|
|
26
|
+
fun initializeTPSPlayer(orgId: String) {
|
|
27
|
+
TPStreamsSDK.initialize(TPStreamsSDK.Provider.TPStreams, orgId)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@ReactMethod
|
|
31
|
+
fun release() {
|
|
32
|
+
runOnMainThread {
|
|
33
|
+
getPlayerFragment()?.release()
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@ReactMethod
|
|
38
|
+
fun play() {
|
|
39
|
+
runOnMainThread {
|
|
40
|
+
getPlayerFragment()?.play()
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@ReactMethod
|
|
45
|
+
fun pause() {
|
|
46
|
+
runOnMainThread {
|
|
47
|
+
getPlayerFragment()?.pause()
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@ReactMethod
|
|
52
|
+
fun seekTo(position: Double) {
|
|
53
|
+
runOnMainThread {
|
|
54
|
+
getPlayerFragment()?.seekTo(position.toLong())
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@ReactMethod
|
|
59
|
+
fun getCurrentTime(promise: Promise) {
|
|
60
|
+
runOnMainThread {
|
|
61
|
+
getPlayerFragment()?.let {
|
|
62
|
+
promise.resolve(it.getCurrentTime().toDouble())
|
|
63
|
+
} ?: promise.reject("PLAYER_NOT_READY", "Player is not initialized")
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@ReactMethod
|
|
68
|
+
fun getDuration(promise: Promise) {
|
|
69
|
+
runOnMainThread {
|
|
70
|
+
getPlayerFragment()?.let {
|
|
71
|
+
promise.resolve(it.getDuration().toDouble())
|
|
72
|
+
} ?: promise.reject("PLAYER_NOT_READY", "Player is not initialized")
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@ReactMethod
|
|
77
|
+
fun getBufferedTime(promise: Promise) {
|
|
78
|
+
runOnMainThread {
|
|
79
|
+
getPlayerFragment()?.let {
|
|
80
|
+
promise.resolve(it.getBufferedTime().toDouble())
|
|
81
|
+
} ?: promise.reject("PLAYER_NOT_READY", "Player is not initialized")
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@ReactMethod
|
|
86
|
+
fun getPlaybackState(promise: Promise) {
|
|
87
|
+
runOnMainThread {
|
|
88
|
+
getPlayerFragment()?.let {
|
|
89
|
+
promise.resolve(it.getPlaybackState())
|
|
90
|
+
} ?: promise.reject("PLAYER_NOT_READY", "Player is not initialized")
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@ReactMethod
|
|
95
|
+
fun getPlayWhenReady(promise: Promise) {
|
|
96
|
+
runOnMainThread {
|
|
97
|
+
getPlayerFragment()?.let {
|
|
98
|
+
promise.resolve(it.getPlayWhenReady())
|
|
99
|
+
} ?: promise.reject("PLAYER_NOT_READY", "Player is not initialized")
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@ReactMethod
|
|
104
|
+
fun setPlayWhenReady(playWhenReady: Boolean) {
|
|
105
|
+
runOnMainThread {
|
|
106
|
+
getPlayerFragment()?.setPlayWhenReady(playWhenReady)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
@ReactMethod
|
|
111
|
+
fun getPlaybackSpeed(promise: Promise) {
|
|
112
|
+
runOnMainThread {
|
|
113
|
+
getPlayerFragment()?.let {
|
|
114
|
+
promise.resolve(it.getPlaybackSpeed().toDouble())
|
|
115
|
+
} ?: promise.reject("PLAYER_NOT_READY", "Player is not initialized")
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@ReactMethod
|
|
120
|
+
fun setPlaybackSpeed(speed: Float) {
|
|
121
|
+
runOnMainThread {
|
|
122
|
+
getPlayerFragment()?.setPlaybackSpeed(speed.toFloat())
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
private fun getPlayerFragment(): PlayerFragment? {
|
|
127
|
+
return PlayerFragment.instance?.takeIf { it.player != null }
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
private fun runOnMainThread(action: () -> Unit) {
|
|
131
|
+
companionReactContext?.runOnUiQueueThread(action)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
companion object {
|
|
135
|
+
const val NAME = "Tpstreams"
|
|
136
|
+
var companionReactContext: ReactApplicationContext? = null
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
package com.tpstreams
|
|
2
|
-
|
|
3
|
-
import com.facebook.react.ReactPackage
|
|
4
|
-
import com.facebook.react.bridge.NativeModule
|
|
5
|
-
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
-
import com.facebook.react.uimanager.ViewManager
|
|
7
|
-
|
|
8
|
-
class TpstreamsPackage : ReactPackage {
|
|
9
|
-
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
|
|
10
|
-
return listOf(TpstreamsModule(reactContext))
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
|
|
14
|
-
return listOf(TpStreamsPlayerViewManager())
|
|
15
|
-
}
|
|
16
|
-
}
|
|
1
|
+
package com.tpstreams
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.ReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.uimanager.ViewManager
|
|
7
|
+
|
|
8
|
+
class TpstreamsPackage : ReactPackage {
|
|
9
|
+
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
|
|
10
|
+
return listOf(TpstreamsModule(reactContext))
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
|
|
14
|
+
return listOf(TpStreamsPlayerViewManager())
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
-
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
-
xmlns:tools="http://schemas.android.com/tools"
|
|
4
|
-
android:layout_width="match_parent"
|
|
5
|
-
android:layout_height="match_parent"
|
|
6
|
-
android:layout_marginTop="64dp"
|
|
7
|
-
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
8
|
-
tools:context=".PlayerFragment">
|
|
9
|
-
|
|
10
|
-
<androidx.constraintlayout.widget.ConstraintLayout
|
|
11
|
-
android:layout_width="match_parent"
|
|
12
|
-
android:layout_height="wrap_content">
|
|
13
|
-
|
|
14
|
-
<androidx.fragment.app.FragmentContainerView
|
|
15
|
-
android:id="@+id/tpstream_player_fragment"
|
|
16
|
-
android:name="com.tpstream.player.ui.TpStreamPlayerFragment"
|
|
17
|
-
android:layout_width="match_parent"
|
|
18
|
-
android:layout_height="0dp"
|
|
19
|
-
android:keepScreenOn="true"
|
|
20
|
-
app:layout_constraintDimensionRatio="H,16:9"
|
|
21
|
-
app:layout_constraintBottom_toBottomOf="parent"
|
|
22
|
-
app:layout_constraintEnd_toEndOf="parent"
|
|
23
|
-
app:layout_constraintStart_toStartOf="parent"
|
|
24
|
-
app:layout_constraintTop_toTopOf="parent"
|
|
25
|
-
tools:layout="@layout/fragment_tp_stream_player" />
|
|
26
|
-
|
|
27
|
-
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
28
|
-
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
xmlns:tools="http://schemas.android.com/tools"
|
|
4
|
+
android:layout_width="match_parent"
|
|
5
|
+
android:layout_height="match_parent"
|
|
6
|
+
android:layout_marginTop="64dp"
|
|
7
|
+
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
8
|
+
tools:context=".PlayerFragment">
|
|
9
|
+
|
|
10
|
+
<androidx.constraintlayout.widget.ConstraintLayout
|
|
11
|
+
android:layout_width="match_parent"
|
|
12
|
+
android:layout_height="wrap_content">
|
|
13
|
+
|
|
14
|
+
<androidx.fragment.app.FragmentContainerView
|
|
15
|
+
android:id="@+id/tpstream_player_fragment"
|
|
16
|
+
android:name="com.tpstream.player.ui.TpStreamPlayerFragment"
|
|
17
|
+
android:layout_width="match_parent"
|
|
18
|
+
android:layout_height="0dp"
|
|
19
|
+
android:keepScreenOn="true"
|
|
20
|
+
app:layout_constraintDimensionRatio="H,16:9"
|
|
21
|
+
app:layout_constraintBottom_toBottomOf="parent"
|
|
22
|
+
app:layout_constraintEnd_toEndOf="parent"
|
|
23
|
+
app:layout_constraintStart_toStartOf="parent"
|
|
24
|
+
app:layout_constraintTop_toTopOf="parent"
|
|
25
|
+
tools:layout="@layout/fragment_tp_stream_player" />
|
|
26
|
+
|
|
27
|
+
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
28
|
+
|
|
29
29
|
</FrameLayout>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
-
<network-security-config>
|
|
3
|
-
<domain-config cleartextTrafficPermitted="true">
|
|
4
|
-
<domain includeSubdomains="true">localhost</domain>
|
|
5
|
-
<domain includeSubdomains="true">10.0.2.2</domain>
|
|
6
|
-
<domain includeSubdomains="true">http://127.0.0.1</domain>
|
|
7
|
-
</domain-config>
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<network-security-config>
|
|
3
|
+
<domain-config cleartextTrafficPermitted="true">
|
|
4
|
+
<domain includeSubdomains="true">localhost</domain>
|
|
5
|
+
<domain includeSubdomains="true">10.0.2.2</domain>
|
|
6
|
+
<domain includeSubdomains="true">http://127.0.0.1</domain>
|
|
7
|
+
</domain-config>
|
|
8
8
|
</network-security-config>
|
package/ios/Tpstreams.h
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
#import "generated/RNTpstreamsSpec/RNTpstreamsSpec.h"
|
|
3
|
-
|
|
4
|
-
@interface Tpstreams : NSObject <NativeTpstreamsSpec>
|
|
5
|
-
|
|
6
|
-
@end
|
|
1
|
+
|
|
2
|
+
#import "generated/RNTpstreamsSpec/RNTpstreamsSpec.h"
|
|
3
|
+
|
|
4
|
+
@interface Tpstreams : NSObject <NativeTpstreamsSpec>
|
|
5
|
+
|
|
6
|
+
@end
|
package/ios/Tpstreams.mm
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
#import "Tpstreams.h"
|
|
2
|
-
|
|
3
|
-
@implementation Tpstreams
|
|
4
|
-
RCT_EXPORT_MODULE()
|
|
5
|
-
|
|
6
|
-
- (NSNumber *)multiply:(double)a b:(double)b {
|
|
7
|
-
NSNumber *result = @(a * b);
|
|
8
|
-
|
|
9
|
-
return result;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
13
|
-
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
14
|
-
{
|
|
15
|
-
return std::make_shared<facebook::react::NativeTpstreamsSpecJSI>(params);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
@end
|
|
1
|
+
#import "Tpstreams.h"
|
|
2
|
+
|
|
3
|
+
@implementation Tpstreams
|
|
4
|
+
RCT_EXPORT_MODULE()
|
|
5
|
+
|
|
6
|
+
- (NSNumber *)multiply:(double)a b:(double)b {
|
|
7
|
+
NSNumber *result = @(a * b);
|
|
8
|
+
|
|
9
|
+
return result;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
13
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
14
|
+
{
|
|
15
|
+
return std::make_shared<facebook::react::NativeTpstreamsSpecJSI>(params);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@end
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeTpstreams.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAMpCC,gCAAmB,CAACC,YAAY,CAAO,WAAW,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","TpStreamsPlayerView","requireNativeComponent","_default","exports","default"],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":["_reactNative","require","TpStreamsPlayerView","requireNativeComponent","_default","exports","default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,mBAAmB,GAAG,IAAAC,mCAAsB,EAChD,qBACF,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaJ,mBAAmB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeTpstreams.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AAMlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,WAAW,CAAC","ignoreList":[]}
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["requireNativeComponent","TpStreamsPlayerView"],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":["requireNativeComponent","TpStreamsPlayerView"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AACA,SAASA,sBAAsB,QAAQ,cAAc;AAErD,MAAMC,mBAAmB,GAAGD,sBAAsB,CAChD,qBACF,CAAC;AAED,eAAeC,mBAAmB","ignoreList":[]}
|
package/lib/module/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|