@24i/smartapps-bigscreen-rnv-build-engine 0.17.27-alpha.2774 → 0.17.27-alpha.2785
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 +11 -10
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/bridge/BridgeFromJavaScript.kt +14 -3
- 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 +106 -10
- package/dist/templates/platforms/androidtv/project/build.gradle +2 -2
- package/dist/templates/platforms/androidtv/project/gradle/wrapper/gradle-wrapper.properties +3 -3
- package/dist/templates/platforms/tizen/project/config.xml +1 -0
- 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
|
|
|
@@ -129,5 +129,6 @@ dependencies {
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
implementation project(':common')
|
|
132
|
-
}
|
|
133
132
|
|
|
133
|
+
implementation "com.google.android.gms:play-services-ads-identifier:18.2.0"
|
|
134
|
+
}
|
|
@@ -8,15 +8,14 @@ import android.webkit.JavascriptInterface
|
|
|
8
8
|
import com.google.gson.JsonObject
|
|
9
9
|
import com.twentyfouri.player.base.TextTrack
|
|
10
10
|
import com.twentyfouri.player.base.TrackKind
|
|
11
|
-
import com.twentyfouri.tvbridge.webview.parser.SourceParser.stringToJson
|
|
12
11
|
import com.twentyfouri.tvbridge.webview.parser.PlaybackInfoParser.parse
|
|
13
|
-
import com.twentyfouri.tvbridge.webview.parser.SourceParser
|
|
12
|
+
import com.twentyfouri.tvbridge.webview.parser.SourceParser.stringToJson
|
|
14
13
|
import com.twentyfouri.tvbridge.webview.parser.TrackJsonModelParser.audioFromJson
|
|
15
14
|
import com.twentyfouri.tvbridge.webview.parser.TrackJsonModelParser.textFromJson
|
|
16
15
|
import com.twentyfouri.tvbridge.webview.parser.TrackJsonModelParser.toJson
|
|
17
16
|
import com.twentyfouri.tvbridge.webview.viewmodel.WebViewModel
|
|
18
17
|
import java.text.SimpleDateFormat
|
|
19
|
-
import java.util
|
|
18
|
+
import java.util.Arrays
|
|
20
19
|
import java.util.concurrent.CountDownLatch
|
|
21
20
|
import java.util.concurrent.TimeUnit
|
|
22
21
|
import kotlin.math.roundToInt
|
|
@@ -375,6 +374,18 @@ class BridgeFromJavaScript(
|
|
|
375
374
|
return ""
|
|
376
375
|
}
|
|
377
376
|
|
|
377
|
+
/***
|
|
378
|
+
* Bridget JS 2 Android to get advertising id
|
|
379
|
+
*/
|
|
380
|
+
@JavascriptInterface
|
|
381
|
+
fun bridgeJavaScriptToAndroid_GetAdId() = viewModel.adId
|
|
382
|
+
|
|
383
|
+
/***
|
|
384
|
+
* Bridget JS 2 Android to get limit ad tracking info
|
|
385
|
+
*/
|
|
386
|
+
@JavascriptInterface
|
|
387
|
+
fun bridgeJavaScriptToAndroid_GetLimitAdTracking() = viewModel.limitAdTracking
|
|
388
|
+
|
|
378
389
|
companion object {
|
|
379
390
|
const val LOG_TAG = "JavaScriptBridge"
|
|
380
391
|
val DISABLED_AUDIO_TRACK = JsonObject().apply {
|
|
@@ -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
|
|
@@ -6,12 +6,15 @@ import android.content.Intent
|
|
|
6
6
|
import android.graphics.Bitmap
|
|
7
7
|
import android.graphics.Canvas
|
|
8
8
|
import android.os.Build
|
|
9
|
+
import android.provider.Settings
|
|
9
10
|
import android.util.Log
|
|
10
11
|
import android.view.KeyEvent
|
|
11
12
|
import android.view.View
|
|
12
13
|
import android.webkit.CookieManager
|
|
13
14
|
import android.webkit.WebChromeClient
|
|
14
15
|
import android.webkit.WebView
|
|
16
|
+
import com.google.android.gms.ads.identifier.AdvertisingIdClient
|
|
17
|
+
import com.google.android.gms.common.GooglePlayServicesNotAvailableException
|
|
15
18
|
import com.google.gson.JsonArray
|
|
16
19
|
import com.google.gson.JsonObject
|
|
17
20
|
import com.twentyfouri.player.base.*
|
|
@@ -23,7 +26,6 @@ import com.twentyfouri.tvbridge.bridge.BridgeToJavaScript
|
|
|
23
26
|
import com.twentyfouri.tvbridge.common.*
|
|
24
27
|
import com.twentyfouri.tvbridge.configuration.BridgeConfig
|
|
25
28
|
import com.twentyfouri.tvbridge.global.utils.LocalStorage
|
|
26
|
-
import com.twentyfouri.tvbridge.global.utils.PlayerFactoryTheoPlayerCustomized
|
|
27
29
|
import com.twentyfouri.tvbridge.global.utils.PlayerFactoryVersion
|
|
28
30
|
import com.twentyfouri.tvbridge.global.utils.SourceDrmOverridden
|
|
29
31
|
import com.twentyfouri.tvbridge.webview.client.BridgeWebView
|
|
@@ -59,6 +61,8 @@ class WebViewModel @Inject constructor(
|
|
|
59
61
|
|
|
60
62
|
private var source: Source? = null
|
|
61
63
|
|
|
64
|
+
private var adStarted: Boolean = false
|
|
65
|
+
|
|
62
66
|
val audioTrack: AudioTrack?
|
|
63
67
|
get() = player?.selectedAudioTrack
|
|
64
68
|
val subtitleTrack: TextTrack?
|
|
@@ -283,68 +287,136 @@ class WebViewModel @Inject constructor(
|
|
|
283
287
|
when (event) {
|
|
284
288
|
is ErrorEvent -> {
|
|
285
289
|
Log.e("AndroidPlayer", "Player error", event.error)
|
|
286
|
-
jsBridge.bridgeAndroidToJavaScript_ErrorEvent(
|
|
290
|
+
jsBridge.bridgeAndroidToJavaScript_ErrorEvent(
|
|
291
|
+
MediaEventType.ERROR,
|
|
292
|
+
"${event.error.message} - ${event.error.nativeCode}"
|
|
293
|
+
)
|
|
287
294
|
stopPlayer()
|
|
288
295
|
}
|
|
296
|
+
|
|
289
297
|
is LoadedMetadataEvent -> {
|
|
290
298
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.LOADEDMETADATA)
|
|
291
|
-
jsBridge.bridgeAndroidToJavaScript_MediaTrackEvent(
|
|
299
|
+
jsBridge.bridgeAndroidToJavaScript_MediaTrackEvent(
|
|
300
|
+
MediaEventType.TRACKS_CHANGED,
|
|
301
|
+
player.audioTracks,
|
|
302
|
+
player.textTracks
|
|
303
|
+
)
|
|
292
304
|
}
|
|
305
|
+
|
|
293
306
|
is LoadedDataEvent -> {
|
|
294
307
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.LOADEDDATA)
|
|
295
308
|
}
|
|
309
|
+
|
|
296
310
|
is CanPlayEvent -> {
|
|
297
311
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.CANPLAY)
|
|
298
312
|
}
|
|
313
|
+
|
|
299
314
|
is EndedEvent -> {
|
|
300
315
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.ENDED)
|
|
301
316
|
}
|
|
317
|
+
|
|
302
318
|
is WaitingEvent -> {
|
|
303
319
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.WAITING)
|
|
304
320
|
}
|
|
321
|
+
|
|
305
322
|
is PlayingEvent -> {
|
|
306
323
|
view?.setBlackCurtainVisibility(View.GONE)
|
|
307
324
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.PLAYING)
|
|
308
325
|
}
|
|
326
|
+
|
|
309
327
|
is SeekingEvent -> {
|
|
310
328
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.SEEKING)
|
|
311
329
|
}
|
|
330
|
+
|
|
312
331
|
is SeekedEvent -> {
|
|
313
332
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.SEEKED)
|
|
314
333
|
}
|
|
334
|
+
|
|
315
335
|
is TimeUpdateEvent -> {
|
|
316
336
|
if (player.playing) {
|
|
317
337
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.TIME_UPDATE)
|
|
318
338
|
}
|
|
319
339
|
}
|
|
340
|
+
|
|
320
341
|
is PauseEvent -> {
|
|
321
342
|
if (!player.playing) {
|
|
322
343
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.PAUSE)
|
|
323
344
|
}
|
|
324
345
|
}
|
|
346
|
+
|
|
325
347
|
is AddAudioTrackEvent, is AddTextTrackEvent,
|
|
326
348
|
is RemoveAudioTrackEvent, is RemoveTextTrackEvent,
|
|
327
349
|
is ChangeAudioTrackEvent, is ChangeTextTrackEvent -> {
|
|
328
350
|
Log.d("WebViewModel", "onTrackschanged: audio=$audioTrack subtitle=$subtitleTrack")
|
|
329
|
-
jsBridge.bridgeAndroidToJavaScript_MediaTrackEvent(
|
|
351
|
+
jsBridge.bridgeAndroidToJavaScript_MediaTrackEvent(
|
|
352
|
+
MediaEventType.TRACKS_CHANGED,
|
|
353
|
+
player.audioTracks,
|
|
354
|
+
player.textTracks
|
|
355
|
+
)
|
|
330
356
|
}
|
|
357
|
+
|
|
331
358
|
is AdBreaksRescheduledEvent -> {
|
|
332
|
-
jsBridge.bridgeAndroidToJavaScript_MediaAdBreaksEvent(
|
|
359
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdBreaksEvent(
|
|
360
|
+
MediaEventType.AD_BREAKS_RESCHEDULED,
|
|
361
|
+
player.timeline
|
|
362
|
+
)
|
|
333
363
|
}
|
|
364
|
+
|
|
334
365
|
is AdBreakStartedEvent -> {
|
|
335
|
-
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
366
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
367
|
+
MediaEventType.AD_BREAK_START,
|
|
368
|
+
player.currentAdBreak,
|
|
369
|
+
player.currentAd
|
|
370
|
+
)
|
|
336
371
|
}
|
|
372
|
+
|
|
337
373
|
is AdBreakEndedEvent -> {
|
|
338
|
-
|
|
374
|
+
if (adStarted) {
|
|
375
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
376
|
+
MediaEventType.AD_ENDED,
|
|
377
|
+
player.currentAdBreak,
|
|
378
|
+
null
|
|
379
|
+
)
|
|
380
|
+
}
|
|
381
|
+
adStarted = false
|
|
382
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
383
|
+
MediaEventType.AD_BREAK_END,
|
|
384
|
+
player.currentAdBreak,
|
|
385
|
+
player.currentAd
|
|
386
|
+
)
|
|
339
387
|
}
|
|
388
|
+
|
|
340
389
|
is AdStartedEvent -> {
|
|
341
|
-
|
|
390
|
+
if (adStarted) {
|
|
391
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
392
|
+
MediaEventType.AD_ENDED,
|
|
393
|
+
player.currentAdBreak,
|
|
394
|
+
null
|
|
395
|
+
)
|
|
396
|
+
} else {
|
|
397
|
+
adStarted = true
|
|
398
|
+
}
|
|
399
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
400
|
+
MediaEventType.AD_STARTED,
|
|
401
|
+
player.currentAdBreak,
|
|
402
|
+
player.currentAd
|
|
403
|
+
)
|
|
342
404
|
}
|
|
405
|
+
|
|
343
406
|
is AdErrorEvent -> {
|
|
344
|
-
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
407
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
408
|
+
MediaEventType.AD_ERROR,
|
|
409
|
+
player.currentAdBreak,
|
|
410
|
+
player.currentAd
|
|
411
|
+
)
|
|
345
412
|
}
|
|
413
|
+
|
|
346
414
|
is AdSkippedEvent -> {
|
|
347
|
-
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
415
|
+
jsBridge.bridgeAndroidToJavaScript_MediaAdEvent(
|
|
416
|
+
MediaEventType.AD_SKIPPED,
|
|
417
|
+
player.currentAdBreak,
|
|
418
|
+
player.currentAd
|
|
419
|
+
)
|
|
348
420
|
}
|
|
349
421
|
}
|
|
350
422
|
}
|
|
@@ -557,6 +629,30 @@ class WebViewModel @Inject constructor(
|
|
|
557
629
|
}
|
|
558
630
|
}
|
|
559
631
|
|
|
632
|
+
val adId get() = try {
|
|
633
|
+
// Let's try Google first
|
|
634
|
+
AdvertisingIdClient.getAdvertisingIdInfo(context).id
|
|
635
|
+
} catch (e: GooglePlayServicesNotAvailableException) {
|
|
636
|
+
// Probably Amazon
|
|
637
|
+
try {
|
|
638
|
+
Settings.Secure.getString(context.contentResolver, "advertising_id")
|
|
639
|
+
} catch (snfe: Settings.SettingNotFoundException) {
|
|
640
|
+
null
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
val limitAdTracking get() = try {
|
|
645
|
+
// Let's try Google first
|
|
646
|
+
AdvertisingIdClient.getAdvertisingIdInfo(context).isLimitAdTrackingEnabled
|
|
647
|
+
} catch (e: GooglePlayServicesNotAvailableException) {
|
|
648
|
+
// Probably Amazon
|
|
649
|
+
try {
|
|
650
|
+
Settings.Secure.getInt(context.contentResolver, "limit_ad_tracking") != 0
|
|
651
|
+
} catch (snfe: Settings.SettingNotFoundException) {
|
|
652
|
+
null
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
|
|
560
656
|
private inner class InnerIapCallback : IapCallback {
|
|
561
657
|
override fun checkNewPurchasesFinished(result: List<IapPurchase>) {
|
|
562
658
|
// not actually used at the moment
|
|
@@ -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
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
<tizen:privilege name="http://developer.samsung.com/privilege/productinfo"/>
|
|
14
14
|
<tizen:privilege name="http://tizen.org/privilege/internet"/>
|
|
15
15
|
<tizen:privilege name="http://tizen.org/privilege/tv.inputdevice"/>
|
|
16
|
+
<tizen:privilege name="http://developer.samsung.com/privilege/adinfo"/>
|
|
16
17
|
<tizen:setting screen-orientation="landscape" context-menu="enable" background-support="disable" encryption="disable" install-location="auto" hwkey-event="enable"/>
|
|
17
18
|
<tizen:metadata key="http://samsung.com/tv/metadata/use.voiceguide" value="false"/>
|
|
18
19
|
</widget>
|
package/package.json
CHANGED