@24i/smartapps-bigscreen-rnv-build-engine 0.17.2-alpha.2168 → 0.17.2
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/src/resolvers/index.js +1 -3
- package/dist/src/resolvers/resolveBuildFileName.js +27 -3
- package/dist/src/sdks/index.js +1 -5
- package/dist/src/sdks/sdk-utils/sdk-installer/services/unzip.js +2 -3
- package/dist/src/tasks/task.rnv.build.js +1 -3
- package/dist/src/tasks/task.rnv.configure.js +1 -3
- package/dist/src/tasks/task.rnv.platform.configure.js +1 -4
- package/package.json +2 -3
- package/dist/src/__tests__/resolvers/resolveBuildFileBaseName.spec.js +0 -80
- package/dist/src/resolvers/resolveBuildFileBaseName.js +0 -34
- package/dist/src/sdks/sdk-androidtv/index.js +0 -17
- package/dist/src/sdks/sdk-androidtv/sdkAndroidtv.js +0 -260
- package/dist/templates/platforms/androidtv/project/README.md +0 -198
- package/dist/templates/platforms/androidtv/project/amazoniap/build.gradle +0 -37
- package/dist/templates/platforms/androidtv/project/amazoniap/consumer-rules.pro +0 -0
- package/dist/templates/platforms/androidtv/project/amazoniap/libs/in-app-purchasing-2.0.76.jar +0 -0
- package/dist/templates/platforms/androidtv/project/amazoniap/proguard-rules.pro +0 -21
- package/dist/templates/platforms/androidtv/project/amazoniap/src/main/AndroidManifest.xml +0 -4
- package/dist/templates/platforms/androidtv/project/amazoniap/src/main/java/com/twentyfouri/bridgetv/amazoniap/AmazonIapSevice.kt +0 -106
- package/dist/templates/platforms/androidtv/project/app/build.gradle +0 -112
- package/dist/templates/platforms/androidtv/project/app/proguard-rules.pro +0 -32
- package/dist/templates/platforms/androidtv/project/app/src/bigscreenAppstage/java/com/twentyfouri/tvbridge/Flavor.kt +0 -5
- package/dist/templates/platforms/androidtv/project/app/src/bigscreenAppstage/res/raw/configuration.json +0 -9
- package/dist/templates/platforms/androidtv/project/app/src/main/AndroidManifest.xml +0 -53
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/FlavorBase.kt +0 -12
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/bridge/BridgeFromJavaScript.kt +0 -385
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/bridge/BridgeToJavaScript.kt +0 -83
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/configuration/BridgeConfig.kt +0 -16
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/configuration/ConfigCallback.kt +0 -6
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/configuration/ConfigProvider.kt +0 -27
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/configuration/Drm.kt +0 -10
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/configuration/UserAgent.kt +0 -6
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/BaseApplication.kt +0 -73
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/ActivityComponent.kt +0 -13
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/ActivityModule.kt +0 -21
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/ApplicationComponent.kt +0 -24
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/ApplicationModule.kt +0 -43
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/PerActivity.kt +0 -26
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/LocalStorage.kt +0 -30
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/LoggingDrmCallback.kt +0 -38
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/OverriddenHttpMediaDrmCallback.kt +0 -134
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/PlayerFactoryExoPlayerCustomized.kt +0 -84
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/SimpleActivityLifecycleCallback.kt +0 -32
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/SourceDrmOverridden.kt +0 -49
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/jump/JumpAnalytics.kt +0 -211
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/sound/TouchPlayer.kt +0 -86
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/client/BridgeWebView.kt +0 -82
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/client/BridgeWebViewClient.kt +0 -114
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/model/AnalyticsPlaybackInfo.kt +0 -10
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/model/ContentModel.kt +0 -14
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/model/DrmModel.kt +0 -20
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/model/MediaEventType.kt +0 -20
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/parser/ContentModelParser.kt +0 -16
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/parser/DeviceInfoParser.kt +0 -22
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/parser/PlaybackInfoParser.kt +0 -10
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/parser/TrackJsonModelParser.kt +0 -58
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/view/Mainview.kt +0 -20
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/view/PlayerCache.kt +0 -15
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/view/WebViewActivity.kt +0 -301
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/viewmodel/WebViewModel.kt +0 -571
- package/dist/templates/platforms/androidtv/project/app/src/main/res/drawable/banner.png +0 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/res/drawable/button_background_focus.xml +0 -10
- package/dist/templates/platforms/androidtv/project/app/src/main/res/drawable/button_background_normal.xml +0 -7
- package/dist/templates/platforms/androidtv/project/app/src/main/res/drawable/button_background_pressed.xml +0 -7
- package/dist/templates/platforms/androidtv/project/app/src/main/res/drawable/button_focus.xml +0 -8
- package/dist/templates/platforms/androidtv/project/app/src/main/res/layout/activity_web_view.xml +0 -76
- package/dist/templates/platforms/androidtv/project/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/res/raw/click.ogg +0 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/res/raw/fiddle_root_michal_konecny.cer +0 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/res/raw/proxy_milanwilczak.pem +0 -26
- package/dist/templates/platforms/androidtv/project/app/src/main/res/values/styles.xml +0 -12
- package/dist/templates/platforms/androidtv/project/app/src/main/res/xml/network_security_config.xml +0 -12
- package/dist/templates/platforms/androidtv/project/build.gradle +0 -48
- package/dist/templates/platforms/androidtv/project/common/build.gradle +0 -36
- package/dist/templates/platforms/androidtv/project/common/consumer-rules.pro +0 -0
- package/dist/templates/platforms/androidtv/project/common/proguard-rules.pro +0 -21
- package/dist/templates/platforms/androidtv/project/common/src/main/AndroidManifest.xml +0 -4
- package/dist/templates/platforms/androidtv/project/common/src/main/java/com/twentyfouri/tvbridge/common/IapService.kt +0 -114
- package/dist/templates/platforms/androidtv/project/googleiap/build.gradle +0 -38
- package/dist/templates/platforms/androidtv/project/googleiap/consumer-rules.pro +0 -0
- package/dist/templates/platforms/androidtv/project/googleiap/proguard-rules.pro +0 -21
- package/dist/templates/platforms/androidtv/project/googleiap/src/main/AndroidManifest.xml +0 -6
- package/dist/templates/platforms/androidtv/project/googleiap/src/main/java/com/twentyfouri/tvbridge/googleiap/GoogleIapService.kt +0 -29
- package/dist/templates/platforms/androidtv/project/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/dist/templates/platforms/androidtv/project/gradle/wrapper/gradle-wrapper.properties +0 -6
- package/dist/templates/platforms/androidtv/project/gradle.properties +0 -4
- package/dist/templates/platforms/androidtv/project/gradlew +0 -185
- package/dist/templates/platforms/androidtv/project/gradlew.bat +0 -104
- package/dist/templates/platforms/androidtv/project/proguard-rules.pro +0 -42
- package/dist/templates/platforms/androidtv/project/settings.gradle +0 -4
|
@@ -1,385 +0,0 @@
|
|
|
1
|
-
package com.twentyfouri.tvbridge.bridge
|
|
2
|
-
|
|
3
|
-
import android.media.AudioManager
|
|
4
|
-
import android.os.Handler
|
|
5
|
-
import android.os.Looper
|
|
6
|
-
import android.util.Log
|
|
7
|
-
import android.webkit.JavascriptInterface
|
|
8
|
-
import com.google.gson.JsonObject
|
|
9
|
-
import com.twentyfouri.player.base.TextTrack
|
|
10
|
-
import com.twentyfouri.player.base.TrackKind
|
|
11
|
-
import com.twentyfouri.tvbridge.webview.parser.ContentModelParser.stringToJson
|
|
12
|
-
import com.twentyfouri.tvbridge.webview.parser.DeviceInfoParser.deviceInfoParsed
|
|
13
|
-
import com.twentyfouri.tvbridge.webview.parser.PlaybackInfoParser.parse
|
|
14
|
-
import com.twentyfouri.tvbridge.webview.parser.TrackJsonModelParser.audioFromJson
|
|
15
|
-
import com.twentyfouri.tvbridge.webview.parser.TrackJsonModelParser.textFromJson
|
|
16
|
-
import com.twentyfouri.tvbridge.webview.parser.TrackJsonModelParser.toJson
|
|
17
|
-
import com.twentyfouri.tvbridge.webview.viewmodel.WebViewModel
|
|
18
|
-
import java.text.SimpleDateFormat
|
|
19
|
-
import java.util.*
|
|
20
|
-
import java.util.concurrent.CountDownLatch
|
|
21
|
-
import java.util.concurrent.TimeUnit
|
|
22
|
-
import kotlin.math.roundToInt
|
|
23
|
-
|
|
24
|
-
@SuppressWarnings("unused")
|
|
25
|
-
class BridgeFromJavaScript(
|
|
26
|
-
private val viewModel: WebViewModel
|
|
27
|
-
) {
|
|
28
|
-
private val handler = Handler(Looper.getMainLooper())
|
|
29
|
-
|
|
30
|
-
private fun launch(block: () -> Unit) {
|
|
31
|
-
handler.post(block)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
private fun <T> runBlocking(logName: String? = null, block: () -> T): T? {
|
|
35
|
-
val latch = CountDownLatch(1)
|
|
36
|
-
var result: T? = null
|
|
37
|
-
handler.post {
|
|
38
|
-
result = block()
|
|
39
|
-
latch.countDown()
|
|
40
|
-
}
|
|
41
|
-
try {
|
|
42
|
-
latch.await(100L, TimeUnit.MILLISECONDS)
|
|
43
|
-
Log.v(LOG_TAG, "$logName $result")
|
|
44
|
-
} catch (e: InterruptedException) {
|
|
45
|
-
result = null
|
|
46
|
-
Log.v(LOG_TAG, "$logName TIMEOUT")
|
|
47
|
-
}
|
|
48
|
-
return result
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/*
|
|
52
|
-
Bridge Android 2 JS to send messages
|
|
53
|
-
*/
|
|
54
|
-
@JavascriptInterface
|
|
55
|
-
fun bridgeJavaScriptToAndroid_Message(messageString: String) = launch {
|
|
56
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_Message - messageString: $messageString")
|
|
57
|
-
viewModel.showMessage(messageString)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/*
|
|
61
|
-
Bridge Js 2 Android to set the video to the player
|
|
62
|
-
*/
|
|
63
|
-
@JavascriptInterface
|
|
64
|
-
fun bridgeJavaScriptToAndroid_SetVideoPath(jsonString: String) = launch {
|
|
65
|
-
bridgeJavaScriptToAndroid_SetVideoPath(jsonString, null)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
@JavascriptInterface
|
|
69
|
-
fun bridgeJavaScriptToAndroid_SetVideoPath(jsonString: String, mimeType: String?) = launch {
|
|
70
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SetVideoPath = $jsonString")
|
|
71
|
-
try {
|
|
72
|
-
viewModel.stopPlayer()
|
|
73
|
-
val contentModel = stringToJson(jsonString)
|
|
74
|
-
contentModel?.streamType = mimeType?.let {
|
|
75
|
-
when {
|
|
76
|
-
mimeType.contains("application/dash+xml") -> "mpd"
|
|
77
|
-
mimeType.contains("application/vnd.apple.mpegurl") -> "m3u8"
|
|
78
|
-
mimeType.contains("video/mp4") -> "mp4"
|
|
79
|
-
mimeType.contains("application/vnd.ms-sstr+xml") -> "ism"
|
|
80
|
-
mimeType.contains("audio/mpeg") -> "mp3"
|
|
81
|
-
else -> null
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (contentModel?.streamUrl != null) {
|
|
85
|
-
viewModel.setVideo(contentModel)
|
|
86
|
-
}
|
|
87
|
-
} catch (e: Exception) {
|
|
88
|
-
Log.v(LOG_TAG, "bridgeJavaScriptToAndroid_SetVideoPathError - ${e.message}")
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/*
|
|
93
|
-
Bridge Js 2 Android to pause video object
|
|
94
|
-
*/
|
|
95
|
-
@JavascriptInterface
|
|
96
|
-
fun bridgeJavaScriptToAndroid_PlayVideo() = launch {
|
|
97
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_PlayVideo")
|
|
98
|
-
viewModel.requestAudioFocus()
|
|
99
|
-
viewModel.startPlayer()
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/*
|
|
103
|
-
Bridge Js 2 Android to pause video object
|
|
104
|
-
*/
|
|
105
|
-
@JavascriptInterface
|
|
106
|
-
fun bridgeJavaScriptToAndroid_PauseVideo() = launch {
|
|
107
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_PauseVideo")
|
|
108
|
-
viewModel.pausePlayer()
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
@JavascriptInterface /*
|
|
113
|
-
Bridge JS 2 Android to stop and reset the player
|
|
114
|
-
*/
|
|
115
|
-
fun bridgeJavaScriptToAndroid_StopVideo() = launch {
|
|
116
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_StopVideo")
|
|
117
|
-
viewModel.abandonAudioFocus()
|
|
118
|
-
viewModel.stopPlayer()
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/*
|
|
122
|
-
Request the audio focus to discard background audio from other apps
|
|
123
|
-
*/
|
|
124
|
-
@JavascriptInterface
|
|
125
|
-
fun bridgeJavaScriptToAndroid_RequestAudioFocus(): Int = runBlocking("bridgeJavaScriptToAndroid_RequestAudioFocus") {
|
|
126
|
-
viewModel.requestAudioFocus()
|
|
127
|
-
} ?: AudioManager.AUDIOFOCUS_REQUEST_FAILED
|
|
128
|
-
|
|
129
|
-
/*
|
|
130
|
-
Request the audio focus to discard background audio from other apps
|
|
131
|
-
*/
|
|
132
|
-
@JavascriptInterface
|
|
133
|
-
fun bridgeJavaScriptToAndroid_AbandonAudioFocus() = launch {
|
|
134
|
-
viewModel.abandonAudioFocus()
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/*
|
|
138
|
-
Bridge JS 2 Android to get the current time
|
|
139
|
-
*/
|
|
140
|
-
@JavascriptInterface
|
|
141
|
-
fun bridgeJavaScriptToAndroid_GetCurrentTime(): Int = runBlocking("bridgeJavaScriptToAndroid_GetCurrentTime") {
|
|
142
|
-
viewModel.currentPosition.roundToInt() / 1000
|
|
143
|
-
} ?: 0
|
|
144
|
-
|
|
145
|
-
/*
|
|
146
|
-
Bridge JS 2 Android to get the current time
|
|
147
|
-
*/
|
|
148
|
-
@JavascriptInterface
|
|
149
|
-
fun bridgeJavaScriptToAndroid_GetCurrentTimeFloat(): Float = runBlocking("bridgeJavaScriptToAndroid_GetCurrentTimeFloat") {
|
|
150
|
-
viewModel.currentPosition.toFloat() / 1000
|
|
151
|
-
} ?: 0f
|
|
152
|
-
|
|
153
|
-
/*
|
|
154
|
-
Bridge JS 2 Android to get the current time
|
|
155
|
-
Deprecated - use bridgeJavaScriptToAndroid_SetTrack("false") instead to disable
|
|
156
|
-
*/
|
|
157
|
-
@JavascriptInterface
|
|
158
|
-
@Deprecated("")
|
|
159
|
-
fun bridgeJavaScriptToAndroid_setNativeSubtitlesEnabled(subtitlesEnabled: Boolean) = launch {
|
|
160
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_setNativeSubtitlesEnabled($subtitlesEnabled)")
|
|
161
|
-
viewModel.setSubtitlesVisibility(subtitlesEnabled)
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/*
|
|
165
|
-
Bridge JS 2 Android to get the total time
|
|
166
|
-
*/
|
|
167
|
-
@JavascriptInterface
|
|
168
|
-
fun bridgeJavaScriptToAndroid_GetTotalTime(): Int = runBlocking("bridgeJavaScriptToAndroid_GetTotalTime") {
|
|
169
|
-
viewModel.duration.roundToInt() / 1000
|
|
170
|
-
} ?: 0
|
|
171
|
-
|
|
172
|
-
/*
|
|
173
|
-
Bridge JS 2 Android to seek to the time in seconds
|
|
174
|
-
@param seconds time to seek in seconds
|
|
175
|
-
*/
|
|
176
|
-
@JavascriptInterface
|
|
177
|
-
fun bridgeJavaScriptToAndroid_SeekTo(seconds: Int) = launch {
|
|
178
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SeekTo($seconds)")
|
|
179
|
-
viewModel.seekToPosition(1000 * seconds.toDouble())
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/*
|
|
183
|
-
Bridge JS 2 Android to get if the player is playing
|
|
184
|
-
*/
|
|
185
|
-
@JavascriptInterface
|
|
186
|
-
fun bridgeJavaScriptToAndroid_IsPlaying(): Boolean = runBlocking("bridgeJavaScriptToAndroid_IsPlaying") {
|
|
187
|
-
viewModel.isPlayerPlaying
|
|
188
|
-
} ?: false
|
|
189
|
-
|
|
190
|
-
/*
|
|
191
|
-
Bridge JS 2 Android to get if the player is presented to user
|
|
192
|
-
*/
|
|
193
|
-
@JavascriptInterface
|
|
194
|
-
fun bridgeJavaScriptToAndroid_IsInPlayer(): Boolean = runBlocking("bridgeJavaScriptToAndroid_IsInPlayer") {
|
|
195
|
-
viewModel.isInPlayer
|
|
196
|
-
} ?: false
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
/*
|
|
200
|
-
Bridge JS 2 Android to put the video in fullscreen mode
|
|
201
|
-
*/
|
|
202
|
-
@JavascriptInterface
|
|
203
|
-
fun bridgeJavaScriptToAndroid_FullScreenVideo() = launch {
|
|
204
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_FullScreenVideo")
|
|
205
|
-
viewModel.requestAudioFocus()
|
|
206
|
-
viewModel.enableFullScreen()
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
/*
|
|
211
|
-
Bridge JS 2 Android to set the video layout measures
|
|
212
|
-
@param width size in px
|
|
213
|
-
* @param height size in px
|
|
214
|
-
* @param left position in px
|
|
215
|
-
* @param top position in px
|
|
216
|
-
*/
|
|
217
|
-
@JavascriptInterface
|
|
218
|
-
fun bridgeJavaScriptToAndroid_SetVideoLayout(width: Int, height: Int, left: Int, top: Int) = launch {
|
|
219
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_PartialScreenVideo $width $height $left $top")
|
|
220
|
-
viewModel.disableFullScreen(width, height, left, top)
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
/*
|
|
225
|
-
Bridge JS 2 Android to go back and reset the view
|
|
226
|
-
*/
|
|
227
|
-
@JavascriptInterface
|
|
228
|
-
fun bridgeJavaScriptToAndroid_Back() = launch {
|
|
229
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_Back")
|
|
230
|
-
viewModel.onBackPressed()
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/*
|
|
234
|
-
Set the new SUBTITLE track to the player
|
|
235
|
-
*/
|
|
236
|
-
@JavascriptInterface
|
|
237
|
-
fun bridgeJavaScriptToAndroid_SetTrack(trackJson: String) = launch {
|
|
238
|
-
if (trackJson == "") {
|
|
239
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SetTrack empty => DEFAULT")
|
|
240
|
-
viewModel.setSubtitleTrack(null)
|
|
241
|
-
} else if (trackJson == "false") {
|
|
242
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SetTrack false => DISABLED")
|
|
243
|
-
viewModel.setSubtitleTrack(TextTrack {
|
|
244
|
-
id = "text_off"
|
|
245
|
-
kind = TrackKind.EMPTY
|
|
246
|
-
})
|
|
247
|
-
} else {
|
|
248
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SetTrack $trackJson")
|
|
249
|
-
viewModel.setSubtitleTrack(textFromJson(trackJson))
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/*
|
|
254
|
-
Set the new AUDIO track to the player
|
|
255
|
-
*/
|
|
256
|
-
@JavascriptInterface
|
|
257
|
-
fun bridgeJavaScriptToAndroid_SetAudioTrack(trackJson: String?) = launch {
|
|
258
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SetAudioTrack ${trackJson ?: "(none)"}")
|
|
259
|
-
viewModel.setAudioTrack(audioFromJson(trackJson))
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
/*
|
|
263
|
-
Returns current AUDIO track to the player
|
|
264
|
-
*/
|
|
265
|
-
@JavascriptInterface
|
|
266
|
-
fun bridgeJavaScriptToAndroid_getCurrentAudioTrack(): String? = runBlocking("bridgeJavaScriptToAndroid_getCurrentAudioTrack") {
|
|
267
|
-
viewModel.audioTrack?.let { toJson(it) } ?: DISABLED_AUDIO_TRACK
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/*
|
|
271
|
-
Returns current AUDIO track to the player
|
|
272
|
-
*/
|
|
273
|
-
@JavascriptInterface
|
|
274
|
-
fun bridgeJavaScriptToAndroid_getCurrentSubtitleTrack(): String? = runBlocking("bridgeJavaScriptToAndroid_getCurrentSubtitleTrack") {
|
|
275
|
-
viewModel.subtitleTrack?.let { toJson(it) } ?: DISABLED_SUBTITLE_TRACK
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
/*
|
|
279
|
-
Set the cookies to localstorage
|
|
280
|
-
*/
|
|
281
|
-
@JavascriptInterface
|
|
282
|
-
fun bridgeJavaScriptToAndroid_SaveToLocalStorage(key: String?, value: String?) = launch {
|
|
283
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SaveToLocalStorage")
|
|
284
|
-
viewModel.saveToLocalStorage(key, value)
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
/*
|
|
288
|
-
clears the cookies from localstorage
|
|
289
|
-
*/
|
|
290
|
-
@JavascriptInterface
|
|
291
|
-
fun bridgeJavaScriptToAndroid_RemoveFromLocalStorage(key: String?) = launch {
|
|
292
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_RemoveFromLocalStorage")
|
|
293
|
-
viewModel.removeFromLocalStorage(key)
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
/*
|
|
297
|
-
Gets the cookies
|
|
298
|
-
*/
|
|
299
|
-
@JavascriptInterface
|
|
300
|
-
fun bridgeJavaScriptToAndroid_GetFromLocalStorage(key: String?): String? = runBlocking("bridgeJavaScriptToAndroid_GetFromLocalStorage") {
|
|
301
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_GetFromLocalStorage")
|
|
302
|
-
viewModel.getFromLocalStorage(key)
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
/***
|
|
306
|
-
* Bridget JS 2 Android to get the device information
|
|
307
|
-
*/
|
|
308
|
-
@JavascriptInterface
|
|
309
|
-
fun bridgeJavaScriptToAndroid_GetDeviceInfo(): String? {
|
|
310
|
-
return deviceInfoParsed
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
@JavascriptInterface
|
|
314
|
-
fun bridgeJavaScriptToAndroid_SetPlaybackInfo(playbackInfo: String) = launch {
|
|
315
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SetPlaybackInfo($playbackInfo)")
|
|
316
|
-
viewModel.setPlaybackInfo(parse(playbackInfo))
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
@JavascriptInterface
|
|
320
|
-
fun bridgeJavaScriptToAndroid_SignData(dataJson: String?): String? {
|
|
321
|
-
// Log.v(LOG_TAG, "bridgeJavaScriptToAndroid_SignData dataJson = " + dataJson);
|
|
322
|
-
return viewModel.signData(dataJson)
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
@JavascriptInterface
|
|
326
|
-
fun bridgeJavaScriptToAndroid_GetCurrentDateTime(): String? {
|
|
327
|
-
return SimpleDateFormat().toLocalizedPattern()
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
@JavascriptInterface
|
|
331
|
-
fun bridgeReceiptAmazonIAPValidation(sku: String?) {
|
|
332
|
-
bridgeReceiptIAPValidation(sku)
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
@JavascriptInterface
|
|
336
|
-
fun bridgeReceiptIAPValidation(sku: String?) = launch {
|
|
337
|
-
Log.d(LOG_TAG, "bridgeReceiptIAPValidation")
|
|
338
|
-
viewModel.launchIapPurchase(sku)
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
/***
|
|
342
|
-
* Bridget JS 2 Android to check skus detail
|
|
343
|
-
*
|
|
344
|
-
* @param skus SKUS
|
|
345
|
-
*/
|
|
346
|
-
@JavascriptInterface
|
|
347
|
-
fun bridgeJavaScriptToAndroid_getInAppProductDetail(skus: Array<String>) {
|
|
348
|
-
Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_getProductDetail SKU: " + Arrays.toString(skus))
|
|
349
|
-
viewModel.getIapProductDetails(skus.toList())
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
/***
|
|
353
|
-
* Bridget JS 2 Android to validate a receipt
|
|
354
|
-
*/
|
|
355
|
-
@JavascriptInterface
|
|
356
|
-
fun bridgeReceiptAmazonIAPValidated(receiptId: String?) {
|
|
357
|
-
bridgeReceiptIAPValidated(receiptId)
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
@JavascriptInterface
|
|
361
|
-
fun bridgeReceiptIAPValidated(receiptId: String?) {
|
|
362
|
-
Log.d(LOG_TAG, "bridgeReceiptIAPValidated receiptId=$receiptId")
|
|
363
|
-
viewModel.acknowledgeIapReceipt(receiptId ?: "")
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
/***
|
|
367
|
-
* Bridget JS 2 Android to get the old IAP receipts
|
|
368
|
-
*/
|
|
369
|
-
@JavascriptInterface
|
|
370
|
-
fun bridgeGetHistoricPurchases(): String? {
|
|
371
|
-
// I think this is not needed, but might come back in future
|
|
372
|
-
// return AmazonIAPListener.getInstance().getIAPManager().getHistoricPurchases().toString();
|
|
373
|
-
return ""
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
companion object {
|
|
377
|
-
const val LOG_TAG = "JavaScriptBridge"
|
|
378
|
-
val DISABLED_AUDIO_TRACK = JsonObject().apply {
|
|
379
|
-
addProperty("type", "audio")
|
|
380
|
-
}.toString()
|
|
381
|
-
val DISABLED_SUBTITLE_TRACK = JsonObject().apply {
|
|
382
|
-
addProperty("type", "subtitles")
|
|
383
|
-
}.toString()
|
|
384
|
-
}
|
|
385
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
package com.twentyfouri.tvbridge.bridge
|
|
2
|
-
|
|
3
|
-
import android.util.Log
|
|
4
|
-
import com.twentyfouri.player.base.AudioTrack
|
|
5
|
-
import com.twentyfouri.player.base.TextTrack
|
|
6
|
-
import com.twentyfouri.tvbridge.bridge.BridgeFromJavaScript.Companion.LOG_TAG
|
|
7
|
-
import com.twentyfouri.tvbridge.configuration.BridgeConfig
|
|
8
|
-
import com.twentyfouri.tvbridge.webview.parser.TrackJsonModelParser.toJson
|
|
9
|
-
|
|
10
|
-
class BridgeToJavaScript(
|
|
11
|
-
config: BridgeConfig,
|
|
12
|
-
private val executeJavaScript: (String) -> Unit
|
|
13
|
-
) {
|
|
14
|
-
private val keyEventPrefix: String = config.keyEventPrefix
|
|
15
|
-
private val mediaEventPrefix: String = config.mediaEventPrefix
|
|
16
|
-
private val iapEventPrefix: String = config.iapEventPrefix
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Android 2 JavaScript keyevent Event. Dispatch key custom event to the page document element
|
|
20
|
-
*
|
|
21
|
-
* @param keyCode the keycode which is being sent from the Android code.
|
|
22
|
-
* @param keyEvent the keyevent which is being sent from the Android code.
|
|
23
|
-
*/
|
|
24
|
-
fun bridgeAndroidToJavaScript_KeyEvent(keyCode: Int, keyEvent: String) {
|
|
25
|
-
Log.d(LOG_TAG, "bridgeAndroidToJavaScript_KeyEvent keyCode = $keyCode, keyEvent = $keyEvent")
|
|
26
|
-
executeJavaScript("javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('$keyEventPrefix$keyEvent',true,true);evt.keyCode=$keyCode;evt.which=$keyCode;(document.activeElement?document.activeElement:document).dispatchEvent(evt);})())")
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Android 2 JavaScript media Event. Dispatch key custom event to the page document element
|
|
31
|
-
*
|
|
32
|
-
* @param mediaEvent the mediaEvent which is being sent from the Android code.
|
|
33
|
-
*/
|
|
34
|
-
fun bridgeAndroidToJavaScript_MediaEvent(mediaEvent: String) {
|
|
35
|
-
Log.d(LOG_TAG, "bridgeAndroidToJavaScript_MediaEvent $mediaEventPrefix$mediaEvent")
|
|
36
|
-
executeJavaScript("javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('$mediaEventPrefix$mediaEvent',true,true);document.dispatchEvent(evt);})())")
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Android 2 JavaScript media Event. Dispatch key custom event to the page document element
|
|
41
|
-
*
|
|
42
|
-
* @param mediaEvent the mediaEvent
|
|
43
|
-
* @param tracks tracks from the players stream.
|
|
44
|
-
*/
|
|
45
|
-
fun bridgeAndroidToJavaScript_MediaTrackEvent(
|
|
46
|
-
mediaEvent: String,
|
|
47
|
-
audioTracks: List<AudioTrack>,
|
|
48
|
-
textTracks: List<TextTrack>
|
|
49
|
-
) {
|
|
50
|
-
val tracksJson = toJson(audioTracks, textTracks)
|
|
51
|
-
Log.d(LOG_TAG, tracksJson)
|
|
52
|
-
val mediaEventString = "javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('$mediaEventPrefix$mediaEvent',true,true);evt.tracks='$tracksJson';document.dispatchEvent(evt);})())"
|
|
53
|
-
Log.v(LOG_TAG, mediaEventString)
|
|
54
|
-
executeJavaScript(mediaEventString)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
fun bridgeAndroidToJavaScript_IAPValidationError(message: String) {
|
|
58
|
-
Log.d(LOG_TAG, "bridgeAndroidToJavaScript_IAPValidationError")
|
|
59
|
-
executeJavaScript("javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('${iapEventPrefix}iapError',true,true);evt.message='$message';document.dispatchEvent(evt);})())")
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
fun bridgeAndroidToJavaScript_IAPValidationSuccess(
|
|
63
|
-
userId: String,
|
|
64
|
-
receiptId: String,
|
|
65
|
-
sku: String
|
|
66
|
-
) {
|
|
67
|
-
Log.d(
|
|
68
|
-
LOG_TAG,
|
|
69
|
-
"bridgeAndroidToJavaScript_IAPValidationSuccess sku=$sku receiptId=$receiptId"
|
|
70
|
-
)
|
|
71
|
-
executeJavaScript("javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('${iapEventPrefix}iapSuccess',true,true);evt.userId='$userId';evt.receiptId='$receiptId';evt.sku='$sku';document.dispatchEvent(evt);})())")
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
fun bridgeIAPGetProductDataSuccess(okSkus: String, badSkus: String) {
|
|
75
|
-
Log.d(LOG_TAG, "bridgeIAPGetProductDataSuccess ok=$okSkus bad=$badSkus")
|
|
76
|
-
executeJavaScript("javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('${iapEventPrefix}onInAppProductDetailSuccess',true,true);evt.okSkus=$okSkus;evt.badSkus=$badSkus;document.dispatchEvent(evt);})())")
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
fun bridgeIAPGetProductDataFail(reason: String) {
|
|
80
|
-
Log.d(LOG_TAG, "bridgeIAPGetProductDataFail")
|
|
81
|
-
executeJavaScript("javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('${iapEventPrefix}onInAppProductDetailError',true,true);evt.message='$reason';document.dispatchEvent(evt);})())")
|
|
82
|
-
}
|
|
83
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
package com.twentyfouri.tvbridge.configuration
|
|
2
|
-
|
|
3
|
-
import com.twentyfouri.tvbridge.BuildConfig
|
|
4
|
-
|
|
5
|
-
class BridgeConfig {
|
|
6
|
-
var baseUrl: String = "http://portal.24imedia.tv/"
|
|
7
|
-
var userAgent: UserAgent = UserAgent()
|
|
8
|
-
var drm: Drm = Drm()
|
|
9
|
-
var isEnabledTouchSound: Boolean = false
|
|
10
|
-
var playerAppName: String? = null
|
|
11
|
-
var keyEventPrefix: String = ""
|
|
12
|
-
var mediaEventPrefix: String = ""
|
|
13
|
-
var iapEventPrefix: String = ""
|
|
14
|
-
var customizableUrl: Boolean = BuildConfig.DEBUG
|
|
15
|
-
var startWithHighVideoQuality: Boolean = false
|
|
16
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
package com.twentyfouri.tvbridge.configuration
|
|
2
|
-
|
|
3
|
-
import android.content.Context
|
|
4
|
-
import com.google.gson.Gson
|
|
5
|
-
import java.io.InputStreamReader
|
|
6
|
-
|
|
7
|
-
object ConfigProvider {
|
|
8
|
-
fun load(context: Context, callback: ConfigCallback) {
|
|
9
|
-
val resId = context.resources.getIdentifier("configuration", "raw", context.packageName)
|
|
10
|
-
if (resId == 0) {
|
|
11
|
-
callback.onConfigError("Configuration is missing @raw/configuration")
|
|
12
|
-
return
|
|
13
|
-
}
|
|
14
|
-
try {
|
|
15
|
-
val inputStream = context.resources.openRawResource(resId)
|
|
16
|
-
try {
|
|
17
|
-
val config = Gson().fromJson(InputStreamReader(inputStream), BridgeConfig::class.java)
|
|
18
|
-
callback.onConfigLoaded(config)
|
|
19
|
-
} finally {
|
|
20
|
-
inputStream.close()
|
|
21
|
-
}
|
|
22
|
-
} catch (e: Exception) {
|
|
23
|
-
e.printStackTrace()
|
|
24
|
-
callback.onConfigError("Failed to read the input stream")
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
package com.twentyfouri.tvbridge.global
|
|
2
|
-
|
|
3
|
-
import android.app.Activity
|
|
4
|
-
import android.app.Application
|
|
5
|
-
import android.os.Bundle
|
|
6
|
-
import android.util.Log
|
|
7
|
-
import android.view.View
|
|
8
|
-
import com.twentyfouri.tvbridge.configuration.BridgeConfig
|
|
9
|
-
import com.twentyfouri.tvbridge.configuration.ConfigCallback
|
|
10
|
-
import com.twentyfouri.tvbridge.configuration.ConfigProvider.load
|
|
11
|
-
import com.twentyfouri.tvbridge.global.di.ApplicationComponent
|
|
12
|
-
import com.twentyfouri.tvbridge.global.di.ApplicationModule
|
|
13
|
-
import com.twentyfouri.tvbridge.global.di.DaggerApplicationComponent
|
|
14
|
-
import com.twentyfouri.tvbridge.global.utils.SimpleActivityLifecycleCallback
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Created by David on 30/12/15.
|
|
18
|
-
*/
|
|
19
|
-
class BaseApplication : Application() {
|
|
20
|
-
|
|
21
|
-
private var bridgeConfig: BridgeConfig = BridgeConfig()
|
|
22
|
-
|
|
23
|
-
var component: ApplicationComponent? = null
|
|
24
|
-
get() {
|
|
25
|
-
if (field == null) {
|
|
26
|
-
field = DaggerApplicationComponent.builder()
|
|
27
|
-
.applicationModule(ApplicationModule(this, bridgeConfig))
|
|
28
|
-
.build()
|
|
29
|
-
}
|
|
30
|
-
return field
|
|
31
|
-
}
|
|
32
|
-
private set
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
override fun onCreate() {
|
|
36
|
-
super.onCreate()
|
|
37
|
-
|
|
38
|
-
// No projects have google_services.json, so we cannot actually enable Crashlytics
|
|
39
|
-
// FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
|
|
40
|
-
registerActivityLifecycleCallbacks(object : SimpleActivityLifecycleCallback() {
|
|
41
|
-
override fun onActivityCreated(activity: Activity, bundle: Bundle?) {
|
|
42
|
-
val decorView = activity.window.decorView
|
|
43
|
-
// Hide the status bar.
|
|
44
|
-
decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
|
|
45
|
-
// Remember that you should never show the action bar if the
|
|
46
|
-
// status bar is hidden, so hide that too if necessary.
|
|
47
|
-
hideSystemUI(decorView)
|
|
48
|
-
activity.actionBar?.hide()
|
|
49
|
-
}
|
|
50
|
-
})
|
|
51
|
-
load(this, object : ConfigCallback {
|
|
52
|
-
override fun onConfigLoaded(config: BridgeConfig?) {
|
|
53
|
-
bridgeConfig = config ?: BridgeConfig()
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
override fun onConfigError(error: String?) {
|
|
57
|
-
Log.e("BaseApplication", error ?: return)
|
|
58
|
-
}
|
|
59
|
-
})
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
private fun hideSystemUI(decorView: View) {
|
|
63
|
-
// Set the IMMERSIVE flag.
|
|
64
|
-
// Set the content to appear under the system bars so that the content
|
|
65
|
-
// doesn't resize when the system bars hide and show.
|
|
66
|
-
decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
|
67
|
-
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
|
68
|
-
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
|
69
|
-
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
|
|
70
|
-
or View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
|
|
71
|
-
or View.SYSTEM_UI_FLAG_IMMERSIVE)
|
|
72
|
-
}
|
|
73
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
package com.twentyfouri.tvbridge.global.di
|
|
2
|
-
|
|
3
|
-
import android.app.Activity
|
|
4
|
-
import com.twentyfouri.tvbridge.webview.viewmodel.WebViewModel
|
|
5
|
-
import dagger.Component
|
|
6
|
-
import javax.inject.Provider
|
|
7
|
-
|
|
8
|
-
@PerActivity
|
|
9
|
-
@Component(dependencies = [ApplicationComponent::class], modules = [ActivityModule::class])
|
|
10
|
-
interface ActivityComponent : ApplicationComponent {
|
|
11
|
-
val activity: Activity
|
|
12
|
-
val viewModelFactory: Provider<WebViewModel>
|
|
13
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
package com.twentyfouri.tvbridge.global.di
|
|
2
|
-
|
|
3
|
-
import android.app.Activity
|
|
4
|
-
import com.twentyfouri.player.base.PlayerFactoryBase
|
|
5
|
-
import com.twentyfouri.tvbridge.configuration.BridgeConfig
|
|
6
|
-
import com.twentyfouri.tvbridge.global.utils.PlayerFactoryExoPlayerCustomized
|
|
7
|
-
import dagger.Module
|
|
8
|
-
import dagger.Provides
|
|
9
|
-
|
|
10
|
-
@Module
|
|
11
|
-
class ActivityModule(
|
|
12
|
-
private val activity: Activity
|
|
13
|
-
) {
|
|
14
|
-
@Provides
|
|
15
|
-
fun provideActivity() =
|
|
16
|
-
activity
|
|
17
|
-
|
|
18
|
-
@Provides
|
|
19
|
-
fun providePlayerFactory(config: BridgeConfig): PlayerFactoryBase =
|
|
20
|
-
PlayerFactoryExoPlayerCustomized(config)
|
|
21
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
package com.twentyfouri.tvbridge.global.di
|
|
2
|
-
|
|
3
|
-
import android.content.Context
|
|
4
|
-
import com.twentyfouri.tvbridge.common.IapService
|
|
5
|
-
import com.twentyfouri.tvbridge.configuration.BridgeConfig
|
|
6
|
-
import com.twentyfouri.tvbridge.global.BaseApplication
|
|
7
|
-
import com.twentyfouri.tvbridge.global.utils.LocalStorage
|
|
8
|
-
import com.twentyfouri.tvbridge.sound.TouchPlayer
|
|
9
|
-
import com.twentyfouri.tvbridge.webview.viewmodel.WebViewModel
|
|
10
|
-
import dagger.Component
|
|
11
|
-
import dagger.internal.Factory
|
|
12
|
-
import javax.inject.Provider
|
|
13
|
-
import javax.inject.Singleton
|
|
14
|
-
|
|
15
|
-
@Singleton
|
|
16
|
-
@Component(modules = [ApplicationModule::class])
|
|
17
|
-
interface ApplicationComponent {
|
|
18
|
-
val application: BaseApplication
|
|
19
|
-
val localStorage: LocalStorage
|
|
20
|
-
val configuration: BridgeConfig
|
|
21
|
-
val applicationContext: Context
|
|
22
|
-
val touchPlayer: TouchPlayer
|
|
23
|
-
val iapService: IapService
|
|
24
|
-
}
|