@24i/smartapps-bigscreen-rnv-build-engine 0.17.27-alpha.2774 → 0.17.27-alpha.2782
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/dist/templates/platforms/androidtv/project/app/build.gradle +9 -10
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/bridge/BridgeToJavaScript.kt +5 -5
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/model/MediaEventType.kt +2 -1
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/view/WebViewActivity.kt +0 -2
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/viewmodel/WebViewModel.kt +79 -9
- package/dist/templates/platforms/androidtv/project/build.gradle +2 -2
- package/dist/templates/platforms/androidtv/project/gradle/wrapper/gradle-wrapper.properties +3 -3
- package/package.json +1 -1
|
@@ -85,7 +85,7 @@ android {
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
dependencies {
|
|
88
|
-
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.
|
|
88
|
+
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'
|
|
89
89
|
|
|
90
90
|
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
|
91
91
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
|
@@ -97,20 +97,20 @@ dependencies {
|
|
|
97
97
|
implementation "androidx.appcompat:appcompat:1.7.0"
|
|
98
98
|
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
|
|
99
99
|
|
|
100
|
-
implementation "com.google.dagger:dagger:2.
|
|
101
|
-
kapt "com.google.dagger:dagger-compiler:2.
|
|
100
|
+
implementation "com.google.dagger:dagger:2.56.1"
|
|
101
|
+
kapt "com.google.dagger:dagger-compiler:2.56.1"
|
|
102
102
|
|
|
103
103
|
implementation "com.squareup.retrofit2:retrofit:2.9.0"
|
|
104
104
|
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
|
|
105
|
-
implementation "com.squareup.okhttp3:logging-interceptor:4.
|
|
106
|
-
implementation "com.squareup.okhttp3:okhttp:4.
|
|
105
|
+
implementation "com.squareup.okhttp3:logging-interceptor:4.12.0"
|
|
106
|
+
implementation "com.squareup.okhttp3:okhttp:4.12.0"
|
|
107
107
|
if (useTheoPlayer) {
|
|
108
|
-
compileOnly "com.twentyfouri.player:exoplayer:0.8.0-alpha.
|
|
109
|
-
implementation "com.twentyfouri.player:theoplayer:0.8.0-alpha.
|
|
108
|
+
compileOnly "com.twentyfouri.player:exoplayer:0.8.0-alpha.18"
|
|
109
|
+
implementation "com.twentyfouri.player:theoplayer:0.8.0-alpha.18"
|
|
110
110
|
implementation "com.theoplayer.theoplayer-sdk-android:core:8.2.0"
|
|
111
111
|
} else {
|
|
112
|
-
implementation "com.twentyfouri.player:exoplayer:0.8.0-alpha.
|
|
113
|
-
compileOnly "com.twentyfouri.player:theoplayer:0.8.0-alpha.
|
|
112
|
+
implementation "com.twentyfouri.player:exoplayer:0.8.0-alpha.18"
|
|
113
|
+
compileOnly "com.twentyfouri.player:theoplayer:0.8.0-alpha.18"
|
|
114
114
|
compileOnly "com.theoplayer.theoplayer-sdk-android:core:8.2.0"
|
|
115
115
|
}
|
|
116
116
|
|
|
@@ -130,4 +130,3 @@ dependencies {
|
|
|
130
130
|
|
|
131
131
|
implementation project(':common')
|
|
132
132
|
}
|
|
133
|
-
|
|
@@ -59,9 +59,9 @@ class BridgeToJavaScript(
|
|
|
59
59
|
textTracks: List<TextTrack>
|
|
60
60
|
) {
|
|
61
61
|
val tracksJson = toJson(audioTracks, textTracks)
|
|
62
|
-
Log.d(LOG_TAG, tracksJson)
|
|
62
|
+
Log.d(LOG_TAG, "bridgeAndroidToJavaScript_MediaTrackEvent $tracksJson")
|
|
63
63
|
val mediaEventString = "javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('$mediaEventPrefix$mediaEvent',true,true);evt.tracks='$tracksJson';document.dispatchEvent(evt);})())"
|
|
64
|
-
Log.v(LOG_TAG, mediaEventString)
|
|
64
|
+
Log.v(LOG_TAG, "bridgeAndroidToJavaScript_MediaTrackEvent $mediaEventString")
|
|
65
65
|
executeJavaScript(mediaEventString)
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -74,8 +74,8 @@ class BridgeToJavaScript(
|
|
|
74
74
|
val adBreakJson = adBreak?.let { serializer.toPersistentMap(it).toString() } ?: ""
|
|
75
75
|
val adJson = ad?.let { serializer.toPersistentMap(it).toString() } ?: ""
|
|
76
76
|
|
|
77
|
-
val mediaEventString = "javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('$mediaEventPrefix$mediaEvent',true,true);evt.adbreak='$adBreakJson';evt.
|
|
78
|
-
Log.v(LOG_TAG, mediaEventString)
|
|
77
|
+
val mediaEventString = "javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('$mediaEventPrefix$mediaEvent',true,true);evt.adbreak='$adBreakJson';evt.ad='$adJson';document.dispatchEvent(evt);})())"
|
|
78
|
+
Log.v(LOG_TAG, "bridgeAndroidToJavaScript_MediaAdEvent $mediaEventString")
|
|
79
79
|
executeJavaScript(mediaEventString)
|
|
80
80
|
}
|
|
81
81
|
|
|
@@ -87,7 +87,7 @@ class BridgeToJavaScript(
|
|
|
87
87
|
val adsJson = JSONArray(timeline.map { serializer.toPersistentMap(it) }).toString()
|
|
88
88
|
|
|
89
89
|
val mediaEventString = "javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('$mediaEventPrefix$mediaEvent',true,true);evt.ads='$adsJson';document.dispatchEvent(evt);})())"
|
|
90
|
-
Log.v(LOG_TAG, mediaEventString)
|
|
90
|
+
Log.v(LOG_TAG, "bridgeAndroidToJavaScript_MediaAdEvent $mediaEventString")
|
|
91
91
|
executeJavaScript(mediaEventString)
|
|
92
92
|
}
|
|
93
93
|
|
|
@@ -22,8 +22,9 @@ object MediaEventType {
|
|
|
22
22
|
const val TRACKS_CHANGED = "trackschanged"
|
|
23
23
|
const val AD_BREAK_START = "adbreakbegin"
|
|
24
24
|
const val AD_BREAK_END = "adbreakend"
|
|
25
|
-
const val AD_BREAKS_RESCHEDULED = "
|
|
25
|
+
const val AD_BREAKS_RESCHEDULED = "adcuepointschanged"
|
|
26
26
|
const val AD_STARTED = "adbegin"
|
|
27
|
+
const val AD_ENDED = "adend"
|
|
27
28
|
const val AD_ERROR = "aderror"
|
|
28
29
|
const val AD_SKIPPED = "adskip"
|
|
29
30
|
}
|
|
@@ -17,11 +17,9 @@ import android.view.inputmethod.InputMethodManager
|
|
|
17
17
|
import android.widget.RelativeLayout
|
|
18
18
|
import android.widget.Toast
|
|
19
19
|
import androidx.appcompat.app.AppCompatActivity
|
|
20
|
-
import androidx.databinding.DataBindingUtil
|
|
21
20
|
import androidx.media.AudioAttributesCompat
|
|
22
21
|
import androidx.media.AudioFocusRequestCompat
|
|
23
22
|
import androidx.media.AudioManagerCompat
|
|
24
|
-
import com.twentyfouri.tvbridge.R
|
|
25
23
|
import com.twentyfouri.tvbridge.configuration.BridgeConfig
|
|
26
24
|
import com.twentyfouri.tvbridge.databinding.ActivityWebViewBinding
|
|
27
25
|
import com.twentyfouri.tvbridge.global.BaseApplication
|
|
@@ -59,6 +59,8 @@ class WebViewModel @Inject constructor(
|
|
|
59
59
|
|
|
60
60
|
private var source: Source? = null
|
|
61
61
|
|
|
62
|
+
private var adStarted: Boolean = false
|
|
63
|
+
|
|
62
64
|
val audioTrack: AudioTrack?
|
|
63
65
|
get() = player?.selectedAudioTrack
|
|
64
66
|
val subtitleTrack: TextTrack?
|
|
@@ -283,68 +285,136 @@ class WebViewModel @Inject constructor(
|
|
|
283
285
|
when (event) {
|
|
284
286
|
is ErrorEvent -> {
|
|
285
287
|
Log.e("AndroidPlayer", "Player error", event.error)
|
|
286
|
-
jsBridge.bridgeAndroidToJavaScript_ErrorEvent(
|
|
288
|
+
jsBridge.bridgeAndroidToJavaScript_ErrorEvent(
|
|
289
|
+
MediaEventType.ERROR,
|
|
290
|
+
"${event.error.message} - ${event.error.nativeCode}"
|
|
291
|
+
)
|
|
287
292
|
stopPlayer()
|
|
288
293
|
}
|
|
294
|
+
|
|
289
295
|
is LoadedMetadataEvent -> {
|
|
290
296
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.LOADEDMETADATA)
|
|
291
|
-
jsBridge.bridgeAndroidToJavaScript_MediaTrackEvent(
|
|
297
|
+
jsBridge.bridgeAndroidToJavaScript_MediaTrackEvent(
|
|
298
|
+
MediaEventType.TRACKS_CHANGED,
|
|
299
|
+
player.audioTracks,
|
|
300
|
+
player.textTracks
|
|
301
|
+
)
|
|
292
302
|
}
|
|
303
|
+
|
|
293
304
|
is LoadedDataEvent -> {
|
|
294
305
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.LOADEDDATA)
|
|
295
306
|
}
|
|
307
|
+
|
|
296
308
|
is CanPlayEvent -> {
|
|
297
309
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.CANPLAY)
|
|
298
310
|
}
|
|
311
|
+
|
|
299
312
|
is EndedEvent -> {
|
|
300
313
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.ENDED)
|
|
301
314
|
}
|
|
315
|
+
|
|
302
316
|
is WaitingEvent -> {
|
|
303
317
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.WAITING)
|
|
304
318
|
}
|
|
319
|
+
|
|
305
320
|
is PlayingEvent -> {
|
|
306
321
|
view?.setBlackCurtainVisibility(View.GONE)
|
|
307
322
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.PLAYING)
|
|
308
323
|
}
|
|
324
|
+
|
|
309
325
|
is SeekingEvent -> {
|
|
310
326
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.SEEKING)
|
|
311
327
|
}
|
|
328
|
+
|
|
312
329
|
is SeekedEvent -> {
|
|
313
330
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.SEEKED)
|
|
314
331
|
}
|
|
332
|
+
|
|
315
333
|
is TimeUpdateEvent -> {
|
|
316
334
|
if (player.playing) {
|
|
317
335
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.TIME_UPDATE)
|
|
318
336
|
}
|
|
319
337
|
}
|
|
338
|
+
|
|
320
339
|
is PauseEvent -> {
|
|
321
340
|
if (!player.playing) {
|
|
322
341
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.PAUSE)
|
|
323
342
|
}
|
|
324
343
|
}
|
|
344
|
+
|
|
325
345
|
is AddAudioTrackEvent, is AddTextTrackEvent,
|
|
326
346
|
is RemoveAudioTrackEvent, is RemoveTextTrackEvent,
|
|
327
347
|
is ChangeAudioTrackEvent, is ChangeTextTrackEvent -> {
|
|
328
348
|
Log.d("WebViewModel", "onTrackschanged: audio=$audioTrack subtitle=$subtitleTrack")
|
|
329
|
-
jsBridge.bridgeAndroidToJavaScript_MediaTrackEvent(
|
|
349
|
+
jsBridge.bridgeAndroidToJavaScript_MediaTrackEvent(
|
|
350
|
+
MediaEventType.TRACKS_CHANGED,
|
|
351
|
+
player.audioTracks,
|
|
352
|
+
player.textTracks
|
|
353
|
+
)
|
|
330
354
|
}
|
|
355
|
+
|
|
331
356
|
is AdBreaksRescheduledEvent -> {
|
|
332
|
-
jsBridge.bridgeAndroidToJavaScript_MediaAdBreaksEvent(
|
|
357
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdBreaksEvent(
|
|
358
|
+
MediaEventType.AD_BREAKS_RESCHEDULED,
|
|
359
|
+
player.timeline
|
|
360
|
+
)
|
|
333
361
|
}
|
|
362
|
+
|
|
334
363
|
is AdBreakStartedEvent -> {
|
|
335
|
-
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
364
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
365
|
+
MediaEventType.AD_BREAK_START,
|
|
366
|
+
player.currentAdBreak,
|
|
367
|
+
player.currentAd
|
|
368
|
+
)
|
|
336
369
|
}
|
|
370
|
+
|
|
337
371
|
is AdBreakEndedEvent -> {
|
|
338
|
-
|
|
372
|
+
if (adStarted) {
|
|
373
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
374
|
+
MediaEventType.AD_ENDED,
|
|
375
|
+
player.currentAdBreak,
|
|
376
|
+
null
|
|
377
|
+
)
|
|
378
|
+
}
|
|
379
|
+
adStarted = false
|
|
380
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
381
|
+
MediaEventType.AD_BREAK_END,
|
|
382
|
+
player.currentAdBreak,
|
|
383
|
+
player.currentAd
|
|
384
|
+
)
|
|
339
385
|
}
|
|
386
|
+
|
|
340
387
|
is AdStartedEvent -> {
|
|
341
|
-
|
|
388
|
+
if (adStarted) {
|
|
389
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
390
|
+
MediaEventType.AD_ENDED,
|
|
391
|
+
player.currentAdBreak,
|
|
392
|
+
null
|
|
393
|
+
)
|
|
394
|
+
} else {
|
|
395
|
+
adStarted = true
|
|
396
|
+
}
|
|
397
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
398
|
+
MediaEventType.AD_STARTED,
|
|
399
|
+
player.currentAdBreak,
|
|
400
|
+
player.currentAd
|
|
401
|
+
)
|
|
342
402
|
}
|
|
403
|
+
|
|
343
404
|
is AdErrorEvent -> {
|
|
344
|
-
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
405
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
406
|
+
MediaEventType.AD_ERROR,
|
|
407
|
+
player.currentAdBreak,
|
|
408
|
+
player.currentAd
|
|
409
|
+
)
|
|
345
410
|
}
|
|
411
|
+
|
|
346
412
|
is AdSkippedEvent -> {
|
|
347
|
-
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
413
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
414
|
+
MediaEventType.AD_SKIPPED,
|
|
415
|
+
player.currentAdBreak,
|
|
416
|
+
player.currentAd
|
|
417
|
+
)
|
|
348
418
|
}
|
|
349
419
|
}
|
|
350
420
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
buildscript {
|
|
2
|
-
ext.kotlin_version = '1.
|
|
2
|
+
ext.kotlin_version = '2.1.20'
|
|
3
3
|
|
|
4
4
|
repositories {
|
|
5
5
|
google()
|
|
6
6
|
mavenCentral()
|
|
7
7
|
}
|
|
8
8
|
dependencies {
|
|
9
|
-
classpath 'com.android.tools.build:gradle:8.
|
|
9
|
+
classpath 'com.android.tools.build:gradle:8.9.1'
|
|
10
10
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
11
11
|
classpath 'com.google.gms:google-services:4.4.2'
|
|
12
12
|
classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.2'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
#Tue Apr 08 16:51:49 CEST 2025
|
|
2
2
|
distributionBase=GRADLE_USER_HOME
|
|
3
|
-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
|
4
3
|
distributionPath=wrapper/dists
|
|
5
|
-
|
|
4
|
+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
|
|
6
5
|
zipStoreBase=GRADLE_USER_HOME
|
|
6
|
+
zipStorePath=wrapper/dists
|
package/package.json
CHANGED