@24i/smartapps-bigscreen-rnv-build-engine 5.0.0-alpha.16 → 5.0.0

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.
Files changed (86) hide show
  1. package/build-freshness.js +158 -0
  2. package/dist/.build-freshness.json +1010 -0
  3. package/dist/templates/platforms/firetv/project/README.md +196 -0
  4. package/dist/templates/platforms/firetv/project/amazoniap/build.gradle +41 -0
  5. package/dist/templates/platforms/firetv/project/amazoniap/consumer-rules.pro +0 -0
  6. package/dist/templates/platforms/firetv/project/amazoniap/proguard-rules.pro +21 -0
  7. package/dist/templates/platforms/firetv/project/amazoniap/src/main/kotlin/com/twentyfouri/bridgetv/amazoniap/AmazonIapService.kt +91 -0
  8. package/dist/templates/platforms/firetv/project/amazoniap/src/main/kotlin/com/twentyfouri/bridgetv/amazoniap/AmazonIapServiceFactory.kt +13 -0
  9. package/dist/templates/platforms/firetv/project/app/build.gradle +138 -0
  10. package/dist/templates/platforms/firetv/project/app/proguard-rules.pro +47 -0
  11. package/dist/templates/platforms/firetv/project/app/src/bigscreenAppstage/kotlin/com/twentyfouri/tvbridge/Flavor.kt +9 -0
  12. package/dist/templates/platforms/firetv/project/app/src/bigscreenAppstage/res/raw/configuration.json +8 -0
  13. package/dist/templates/platforms/firetv/project/app/src/main/AndroidManifest.xml +52 -0
  14. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/FlavorBase.kt +9 -0
  15. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/bridge/BridgeFromJavaScript.kt +421 -0
  16. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/bridge/BridgeToJavaScript.kt +121 -0
  17. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/configuration/BridgeConfig.kt +19 -0
  18. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/configuration/ConfigCallback.kt +6 -0
  19. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/configuration/ConfigProvider.kt +27 -0
  20. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/configuration/Drm.kt +10 -0
  21. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/configuration/UserAgent.kt +6 -0
  22. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/BaseApplication.kt +73 -0
  23. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/di/ActivityComponent.kt +13 -0
  24. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/di/ActivityModule.kt +14 -0
  25. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/di/ApplicationComponent.kt +23 -0
  26. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/di/ApplicationModule.kt +51 -0
  27. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/di/PerActivity.kt +26 -0
  28. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/LocalStorage.kt +30 -0
  29. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/LoggingDrmCallback.kt +38 -0
  30. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/OverriddenHttpMediaDrmCallback.kt +134 -0
  31. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/PlayerFactoryBitmovinCustomized.kt +19 -0
  32. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/PlayerFactoryConfigured.kt +37 -0
  33. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/PlayerFactoryExoPlayerCustomized.kt +106 -0
  34. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/PlayerFactoryExoPlayerNpaw.kt +581 -0
  35. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/PlayerFactoryVersion.kt +27 -0
  36. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/SimpleActivityLifecycleCallback.kt +32 -0
  37. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/SourceDrmOverridden.kt +91 -0
  38. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/sound/TouchPlayer.kt +86 -0
  39. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/client/BridgeWebView.kt +82 -0
  40. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/client/BridgeWebViewClient.kt +114 -0
  41. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/model/AnalyticsPlaybackInfo.kt +10 -0
  42. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/model/ContentModel.kt +14 -0
  43. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/model/DrmModel.kt +20 -0
  44. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/model/MediaEventType.kt +31 -0
  45. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/parser/PlaybackInfoParser.kt +10 -0
  46. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/parser/SourceParser.kt +89 -0
  47. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/parser/TrackJsonModelParser.kt +58 -0
  48. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/view/Mainview.kt +18 -0
  49. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/view/PlayerCache.kt +15 -0
  50. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/view/WebViewActivity.kt +252 -0
  51. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/viewmodel/WebViewModel.kt +748 -0
  52. package/dist/templates/platforms/firetv/project/app/src/main/res/drawable/button_background_focus.xml +10 -0
  53. package/dist/templates/platforms/firetv/project/app/src/main/res/drawable/button_background_normal.xml +7 -0
  54. package/dist/templates/platforms/firetv/project/app/src/main/res/drawable/button_background_pressed.xml +7 -0
  55. package/dist/templates/platforms/firetv/project/app/src/main/res/drawable/button_focus.xml +8 -0
  56. package/dist/templates/platforms/firetv/project/app/src/main/res/layout/activity_web_view.xml +28 -0
  57. package/dist/templates/platforms/firetv/project/app/src/main/res/raw/click.ogg +0 -0
  58. package/dist/templates/platforms/firetv/project/app/src/main/res/values/styles.xml +12 -0
  59. package/dist/templates/platforms/firetv/project/app/src/main/res/xml/network_security_config.xml +4 -0
  60. package/dist/templates/platforms/firetv/project/build.gradle +45 -0
  61. package/dist/templates/platforms/firetv/project/common/build.gradle +41 -0
  62. package/dist/templates/platforms/firetv/project/common/consumer-rules.pro +0 -0
  63. package/dist/templates/platforms/firetv/project/common/proguard-rules.pro +21 -0
  64. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/Util.kt +11 -0
  65. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/IapCallback.kt +11 -0
  66. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/IapException.kt +14 -0
  67. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/IapProduct.kt +16 -0
  68. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/IapPurchase.kt +9 -0
  69. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/IapService.kt +14 -0
  70. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/IapServiceFactory.kt +8 -0
  71. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/NullIapService.kt +32 -0
  72. package/dist/templates/platforms/firetv/project/googleiap/build.gradle +41 -0
  73. package/dist/templates/platforms/firetv/project/googleiap/consumer-rules.pro +0 -0
  74. package/dist/templates/platforms/firetv/project/googleiap/proguard-rules.pro +21 -0
  75. package/dist/templates/platforms/firetv/project/googleiap/src/main/kotlin/com/twentyfouri/tvbridge/googleiap/GoogleIapService.kt +6 -0
  76. package/dist/templates/platforms/firetv/project/googleiap/src/main/kotlin/com/twentyfouri/tvbridge/googleiap/GoogleIapServiceFactory.kt +13 -0
  77. package/dist/templates/platforms/firetv/project/gradle/wrapper/gradle-wrapper.jar +0 -0
  78. package/dist/templates/platforms/firetv/project/gradle/wrapper/gradle-wrapper.properties +7 -0
  79. package/dist/templates/platforms/firetv/project/gradle.properties +4 -0
  80. package/dist/templates/platforms/firetv/project/gradlew +251 -0
  81. package/dist/templates/platforms/firetv/project/gradlew.bat +94 -0
  82. package/dist/templates/platforms/firetv/project/proguard-rules.pro +42 -0
  83. package/dist/templates/platforms/firetv/project/settings.gradle +4 -0
  84. package/index.js +2 -31
  85. package/package.json +7 -3
  86. package/project.json +96 -0
@@ -0,0 +1,252 @@
1
+ package com.twentyfouri.tvbridge.webview.view
2
+
3
+ import android.annotation.SuppressLint
4
+ import android.app.Activity
5
+ import android.graphics.Point
6
+ import android.media.AudioManager
7
+ import android.media.AudioManager.OnAudioFocusChangeListener
8
+ import android.os.Bundle
9
+ import android.text.Editable
10
+ import android.text.TextWatcher
11
+ import android.util.Log
12
+ import android.view.KeyEvent
13
+ import android.view.View
14
+ import android.view.View.MeasureSpec
15
+ import android.view.WindowManager
16
+ import android.view.inputmethod.InputMethodManager
17
+ import android.widget.RelativeLayout
18
+ import android.widget.Toast
19
+ import androidx.appcompat.app.AppCompatActivity
20
+ import androidx.media.AudioAttributesCompat
21
+ import androidx.media.AudioFocusRequestCompat
22
+ import androidx.media.AudioManagerCompat
23
+ import com.twentyfouri.tvbridge.configuration.BridgeConfig
24
+ import com.twentyfouri.tvbridge.databinding.ActivityWebViewBinding
25
+ import com.twentyfouri.tvbridge.global.BaseApplication
26
+ import com.twentyfouri.tvbridge.global.di.ActivityComponent
27
+ import com.twentyfouri.tvbridge.global.di.ActivityModule
28
+ import com.twentyfouri.tvbridge.global.di.DaggerActivityComponent
29
+ import com.twentyfouri.tvbridge.sound.TouchPlayer
30
+ import com.twentyfouri.tvbridge.webview.model.MediaEventType
31
+ import com.twentyfouri.tvbridge.webview.viewmodel.WebViewModel
32
+ import java.net.CookieHandler
33
+ import java.net.CookieManager
34
+ import java.net.CookiePolicy
35
+
36
+ class WebViewActivity : AppCompatActivity(), Mainview {
37
+
38
+ private var initialized: Boolean = false
39
+ private lateinit var component: ActivityComponent
40
+ private lateinit var binding: ActivityWebViewBinding
41
+ private lateinit var config: BridgeConfig
42
+ private lateinit var audioManager: AudioManager
43
+ private lateinit var viewModel: WebViewModel
44
+ private lateinit var touchPlayer: TouchPlayer
45
+
46
+ private val audioFocusListener = OnAudioFocusChangeListener { /* we actually don't care */ }
47
+
48
+ @SuppressLint("SetJavaScriptEnabled")
49
+ override fun onCreate(savedInstanceState: Bundle?) {
50
+ super.onCreate(savedInstanceState)
51
+
52
+ if (!isTaskRoot) {
53
+ finish()
54
+ return
55
+ }
56
+
57
+ component = DaggerActivityComponent.builder()
58
+ .applicationComponent((application as BaseApplication).component)
59
+ .activityModule(ActivityModule(this))
60
+ .build()
61
+ config = component.configuration
62
+ touchPlayer = component.touchPlayer
63
+ viewModel = component.viewModelFactory.get()
64
+ audioManager = getSystemService(AUDIO_SERVICE) as AudioManager
65
+
66
+ window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
67
+ val currentHandler = CookieHandler.getDefault()
68
+ if (currentHandler !== defaultCookieManager) {
69
+ CookieHandler.setDefault(defaultCookieManager)
70
+ }
71
+
72
+ binding = ActivityWebViewBinding.inflate(layoutInflater)
73
+ setContentView(binding.root)
74
+ binding.playerView.playerFactory = viewModel.playerFactory
75
+ viewModel.attachView(this)
76
+ viewModel.configureWebView(binding.webview)
77
+ viewModel.player = binding.playerView.player
78
+
79
+ loadUrl(config.baseUrl)
80
+
81
+ initialized = true
82
+ }
83
+
84
+ override fun reloadPlayer() {
85
+ runOnUiThread {
86
+ binding.playerView.playerFactory = viewModel.playerFactory
87
+ viewModel.player = binding.playerView.player
88
+ }
89
+ }
90
+
91
+ override fun hideKeyboard() {
92
+ val imm = getSystemService(Activity.INPUT_METHOD_SERVICE) as? InputMethodManager
93
+ ?: return
94
+ //If imm is null do nothing
95
+ //Find the currently focused view, so we can grab the correct window token from it.
96
+ //If no view currently has focus, create a new one, just so we can grab a window token from it
97
+ val view = currentFocus ?: View(this)
98
+ imm.hideSoftInputFromWindow(view.windowToken, 0)
99
+ }
100
+
101
+ override fun setBlackCurtainVisibility(visibility: Int) {
102
+ runOnUiThread {
103
+ binding.blackCurtain.visibility = visibility
104
+ }
105
+ }
106
+
107
+ override fun showMessage(message: String?) {
108
+ Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
109
+ }
110
+
111
+ override fun requestAudioFocus(): Int {
112
+ return AudioManagerCompat.requestAudioFocus(
113
+ audioManager,
114
+ AudioFocusRequestCompat
115
+ .Builder(AudioManagerCompat.AUDIOFOCUS_GAIN)
116
+ .setAudioAttributes(
117
+ AudioAttributesCompat
118
+ .Builder()
119
+ .setContentType(AudioAttributesCompat.CONTENT_TYPE_MOVIE)
120
+ .build()
121
+ )
122
+ .setOnAudioFocusChangeListener(audioFocusListener)
123
+ .build()
124
+ )
125
+ }
126
+
127
+ override fun abandonAudioFocus() {
128
+ AudioManagerCompat.abandonAudioFocusRequest(
129
+ audioManager,
130
+ AudioFocusRequestCompat
131
+ .Builder(AudioManagerCompat.AUDIOFOCUS_GAIN)
132
+ .setOnAudioFocusChangeListener(audioFocusListener)
133
+ .build()
134
+ )
135
+ }
136
+
137
+ public override fun onResume() {
138
+ super.onResume()
139
+ viewModel.checkNewPurchases()
140
+ viewModel.resumePlayer()
141
+ }
142
+
143
+ public override fun onPause() {
144
+ viewModel.pausePlayer()
145
+ super.onPause()
146
+ }
147
+
148
+ public override fun onDestroy() {
149
+ if (initialized) {
150
+ viewModel.releasePlayer()
151
+ }
152
+ super.onDestroy()
153
+ }
154
+
155
+ override fun goFullscreen() {
156
+ val layoutParams = binding.playerView.layoutParams as RelativeLayout.LayoutParams
157
+ layoutParams.width = -1
158
+ layoutParams.height = -1
159
+ layoutParams.leftMargin = 0
160
+ layoutParams.topMargin = 0
161
+ val wm = getSystemService(WINDOW_SERVICE) as WindowManager
162
+ val display = wm.defaultDisplay
163
+ val size = Point()
164
+ display.getSize(size)
165
+ val width = size.x
166
+ val height = size.y
167
+ binding.playerView.layoutParams = layoutParams
168
+ binding.playerView.measure(
169
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
170
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
171
+ )
172
+ binding.playerView.layout(width, height, 0, 0)
173
+ }
174
+
175
+ override fun launchIapPurchase(sku: String) {
176
+ viewModel.launchIapPurchase(this, sku)
177
+ }
178
+
179
+ override fun exitFullscreen(width: Int, height: Int, left: Int, top: Int) {
180
+ val layoutParams = binding.playerView.layoutParams as RelativeLayout.LayoutParams
181
+ layoutParams.width = width
182
+ layoutParams.height = height
183
+ layoutParams.leftMargin = left
184
+ layoutParams.topMargin = top
185
+
186
+ //set the layout inner and outer sizes
187
+ binding.playerView.layoutParams = layoutParams
188
+ binding.playerView.layout(width, height, left, top)
189
+ }
190
+
191
+ override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
192
+ when (event.keyCode) {
193
+ KeyEvent.KEYCODE_DPAD_CENTER -> goToUrl()
194
+ else -> {
195
+ viewModel.sendKeyCode(event.keyCode, MediaEventType.KEY_DOWN)
196
+ }
197
+ }
198
+ return super.onKeyDown(keyCode, event)
199
+ }
200
+
201
+ override fun dispatchKeyEvent(event: KeyEvent): Boolean {
202
+ playTouchSounds(event)
203
+ return super.dispatchKeyEvent(event)
204
+ }
205
+
206
+ private fun playTouchSounds(event: KeyEvent) {
207
+ if (event.action != KeyEvent.ACTION_DOWN) {
208
+ return
209
+ }
210
+ when (event.keyCode) {
211
+ KeyEvent.KEYCODE_DPAD_RIGHT,
212
+ KeyEvent.KEYCODE_DPAD_LEFT,
213
+ KeyEvent.KEYCODE_DPAD_UP,
214
+ KeyEvent.KEYCODE_DPAD_DOWN,
215
+ KeyEvent.KEYCODE_DPAD_CENTER ->
216
+ if (config.isEnabledTouchSound) {
217
+ touchPlayer.play()
218
+ }
219
+ }
220
+ }
221
+
222
+ private fun goToUrl() {
223
+ viewModel.onClickGo()
224
+ }
225
+
226
+ override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
227
+ // Send these key presses to the WebView, through a JavaScript bridge.
228
+ viewModel.sendKeyCode(event.keyCode, MediaEventType.KEY_UP)
229
+ return true
230
+ }
231
+
232
+ override fun onKeyLongPress(keyCode: Int, event: KeyEvent): Boolean {
233
+ // Send these key presses to the WebView, through a JavaScript bridge.
234
+ viewModel.sendKeyCode(event.keyCode, MediaEventType.KEY_PRESS)
235
+ return true
236
+ }
237
+
238
+ override fun loadUrl(url: String?) {
239
+ if (url.isNullOrEmpty()) return
240
+ binding.webview.visibility = View.VISIBLE
241
+ binding.webview.loadUrl(url)
242
+ if (url.startsWith("http")) {
243
+ binding.webview.requestFocus()
244
+ }
245
+ }
246
+
247
+ companion object {
248
+ private val defaultCookieManager: CookieManager = CookieManager().apply {
249
+ setCookiePolicy(CookiePolicy.ACCEPT_ALL)
250
+ }
251
+ }
252
+ }