@24i/smartapps-bigscreen-rnv-build-engine 0.17.2-alpha.2154 → 0.17.2-alpha.2155

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 (279) hide show
  1. package/dist/templates/platforms/androidtv/project/README.md +198 -0
  2. package/dist/templates/platforms/androidtv/project/amazoniap/build.gradle +39 -0
  3. package/dist/templates/platforms/androidtv/project/amazoniap/consumer-rules.pro +0 -0
  4. package/dist/templates/platforms/androidtv/project/amazoniap/libs/in-app-purchasing-2.0.76.jar +0 -0
  5. package/dist/templates/platforms/androidtv/project/amazoniap/proguard-rules.pro +21 -0
  6. package/dist/templates/platforms/androidtv/project/amazoniap/src/main/AndroidManifest.xml +4 -0
  7. package/dist/templates/platforms/androidtv/project/amazoniap/src/main/java/com/twentyfouri/bridgetv/amazoniap/AmazonIapSevice.kt +106 -0
  8. package/dist/templates/platforms/androidtv/project/app/build.gradle +371 -0
  9. package/dist/templates/platforms/androidtv/project/app/proguard-rules.pro +32 -0
  10. package/dist/templates/platforms/androidtv/project/app/src/alhurra/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  11. package/dist/templates/platforms/androidtv/project/app/src/alhurra/res/drawable/banner.png +0 -0
  12. package/dist/templates/platforms/androidtv/project/app/src/alhurra/res/mipmap-hdpi/ic_launcher.png +0 -0
  13. package/dist/templates/platforms/androidtv/project/app/src/alhurra/res/mipmap-mdpi/ic_launcher.png +0 -0
  14. package/dist/templates/platforms/androidtv/project/app/src/alhurra/res/mipmap-xhdpi/ic_launcher.png +0 -0
  15. package/dist/templates/platforms/androidtv/project/app/src/alhurra/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  16. package/dist/templates/platforms/androidtv/project/app/src/alhurra/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  17. package/dist/templates/platforms/androidtv/project/app/src/alhurra/res/raw/configuration.json +7 -0
  18. package/dist/templates/platforms/androidtv/project/app/src/androidTest/assets/getStatusSuccesfulResponse.json +9 -0
  19. package/dist/templates/platforms/androidtv/project/app/src/androidTest/assets/tokenFromPassword_200.json +7 -0
  20. package/dist/templates/platforms/androidtv/project/app/src/androidTest/java/com/ngsn/tv/RestServiceTestHelper.java +34 -0
  21. package/dist/templates/platforms/androidtv/project/app/src/androidTest/java/com/ngsn/tv/WebViewActivityTest.java +104 -0
  22. package/dist/templates/platforms/androidtv/project/app/src/androidTest/java/com/twentyfouri/tvbridge/SignTest.kt +54 -0
  23. package/dist/templates/platforms/androidtv/project/app/src/androidTest/java/com/twentyfouri/tvbridge/amazonIAP/AmazonIAPManagerTest.java +74 -0
  24. package/dist/templates/platforms/androidtv/project/app/src/androidTest/java/com/twentyfouri/tvbridge/amazonIAP/SinclairTestRunner.java +22 -0
  25. package/dist/templates/platforms/androidtv/project/app/src/androidTest/java/com/twentyfouri/tvbridge/webview/ui/model/BridgeWebViewTest.java +50 -0
  26. package/dist/templates/platforms/androidtv/project/app/src/bbg/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  27. package/dist/templates/platforms/androidtv/project/app/src/bbg/res/drawable/banner.png +0 -0
  28. package/dist/templates/platforms/androidtv/project/app/src/bbg/res/mipmap-hdpi/ic_launcher.png +0 -0
  29. package/dist/templates/platforms/androidtv/project/app/src/bbg/res/mipmap-mdpi/ic_launcher.png +0 -0
  30. package/dist/templates/platforms/androidtv/project/app/src/bbg/res/mipmap-xhdpi/ic_launcher.png +0 -0
  31. package/dist/templates/platforms/androidtv/project/app/src/bbg/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  32. package/dist/templates/platforms/androidtv/project/app/src/bbg/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  33. package/dist/templates/platforms/androidtv/project/app/src/bbg/res/raw/configuration.json +7 -0
  34. package/dist/templates/platforms/androidtv/project/app/src/bigscreenAppstage/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  35. package/dist/templates/platforms/androidtv/project/app/src/bigscreenAppstage/res/drawable/banner.png +0 -0
  36. package/dist/templates/platforms/androidtv/project/app/src/bigscreenAppstage/res/mipmap-hdpi/ic_launcher.png +0 -0
  37. package/dist/templates/platforms/androidtv/project/app/src/bigscreenAppstage/res/mipmap-mdpi/ic_launcher.png +0 -0
  38. package/dist/templates/platforms/androidtv/project/app/src/bigscreenAppstage/res/mipmap-xhdpi/ic_launcher.png +0 -0
  39. package/dist/templates/platforms/androidtv/project/app/src/bigscreenAppstage/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  40. package/dist/templates/platforms/androidtv/project/app/src/bigscreenAppstage/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  41. package/dist/templates/platforms/androidtv/project/app/src/bigscreenAppstage/res/raw/configuration.json +6 -0
  42. package/dist/templates/platforms/androidtv/project/app/src/broadwayhd/java/com/twentyfouri/tvbridge/Flavor.kt +9 -0
  43. package/dist/templates/platforms/androidtv/project/app/src/broadwayhd/res/drawable/banner.png +0 -0
  44. package/dist/templates/platforms/androidtv/project/app/src/broadwayhd/res/mipmap-hdpi/ic_launcher.png +0 -0
  45. package/dist/templates/platforms/androidtv/project/app/src/broadwayhd/res/mipmap-mdpi/ic_launcher.png +0 -0
  46. package/dist/templates/platforms/androidtv/project/app/src/broadwayhd/res/mipmap-xhdpi/ic_launcher.png +0 -0
  47. package/dist/templates/platforms/androidtv/project/app/src/broadwayhd/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  48. package/dist/templates/platforms/androidtv/project/app/src/broadwayhd/res/raw/configuration.json +16 -0
  49. package/dist/templates/platforms/androidtv/project/app/src/cineClick/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  50. package/dist/templates/platforms/androidtv/project/app/src/cineClick/res/raw/configuration.json +6 -0
  51. package/dist/templates/platforms/androidtv/project/app/src/entel/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  52. package/dist/templates/platforms/androidtv/project/app/src/entel/res/raw/configuration.json +6 -0
  53. package/dist/templates/platforms/androidtv/project/app/src/fuboTV/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  54. package/dist/templates/platforms/androidtv/project/app/src/fuboTV/res/raw/configuration.json +6 -0
  55. package/dist/templates/platforms/androidtv/project/app/src/fuse/AndroidManifest.xml +12 -0
  56. package/dist/templates/platforms/androidtv/project/app/src/fuse/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  57. package/dist/templates/platforms/androidtv/project/app/src/fuse/res/drawable/banner.png +0 -0
  58. package/dist/templates/platforms/androidtv/project/app/src/fuse/res/mipmap-hdpi/ic_launcher.png +0 -0
  59. package/dist/templates/platforms/androidtv/project/app/src/fuse/res/mipmap-mdpi/ic_launcher.png +0 -0
  60. package/dist/templates/platforms/androidtv/project/app/src/fuse/res/mipmap-xhdpi/ic_launcher.png +0 -0
  61. package/dist/templates/platforms/androidtv/project/app/src/fuse/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  62. package/dist/templates/platforms/androidtv/project/app/src/fuse/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  63. package/dist/templates/platforms/androidtv/project/app/src/fuse/res/raw/configuration.json +9 -0
  64. package/dist/templates/platforms/androidtv/project/app/src/gsn/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  65. package/dist/templates/platforms/androidtv/project/app/src/gsn/res/drawable/banner.png +0 -0
  66. package/dist/templates/platforms/androidtv/project/app/src/gsn/res/mipmap-hdpi/ic_launcher.png +0 -0
  67. package/dist/templates/platforms/androidtv/project/app/src/gsn/res/mipmap-mdpi/ic_launcher.png +0 -0
  68. package/dist/templates/platforms/androidtv/project/app/src/gsn/res/mipmap-xhdpi/ic_launcher.png +0 -0
  69. package/dist/templates/platforms/androidtv/project/app/src/gsn/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  70. package/dist/templates/platforms/androidtv/project/app/src/gsn/res/raw/configuration.json +8 -0
  71. package/dist/templates/platforms/androidtv/project/app/src/heremedia/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  72. package/dist/templates/platforms/androidtv/project/app/src/heremedia/res/drawable/banner.png +0 -0
  73. package/dist/templates/platforms/androidtv/project/app/src/heremedia/res/mipmap-hdpi/ic_launcher.png +0 -0
  74. package/dist/templates/platforms/androidtv/project/app/src/heremedia/res/mipmap-mdpi/ic_launcher.png +0 -0
  75. package/dist/templates/platforms/androidtv/project/app/src/heremedia/res/mipmap-xhdpi/ic_launcher.png +0 -0
  76. package/dist/templates/platforms/androidtv/project/app/src/heremedia/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  77. package/dist/templates/platforms/androidtv/project/app/src/heremedia/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  78. package/dist/templates/platforms/androidtv/project/app/src/heremedia/res/raw/configuration.json +6 -0
  79. package/dist/templates/platforms/androidtv/project/app/src/hummingbird/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  80. package/dist/templates/platforms/androidtv/project/app/src/hummingbird/res/mipmap-hdpi/ic_launcher.png +0 -0
  81. package/dist/templates/platforms/androidtv/project/app/src/hummingbird/res/mipmap-mdpi/ic_launcher.png +0 -0
  82. package/dist/templates/platforms/androidtv/project/app/src/hummingbird/res/mipmap-xhdpi/ic_launcher.png +0 -0
  83. package/dist/templates/platforms/androidtv/project/app/src/hummingbird/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  84. package/dist/templates/platforms/androidtv/project/app/src/hummingbird/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  85. package/dist/templates/platforms/androidtv/project/app/src/hummingbird/res/raw/configuration.json +6 -0
  86. package/dist/templates/platforms/androidtv/project/app/src/kijk/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  87. package/dist/templates/platforms/androidtv/project/app/src/kijk/res/drawable/banner.png +0 -0
  88. package/dist/templates/platforms/androidtv/project/app/src/kijk/res/mipmap-hdpi/ic_launcher.png +0 -0
  89. package/dist/templates/platforms/androidtv/project/app/src/kijk/res/mipmap-mdpi/ic_launcher.png +0 -0
  90. package/dist/templates/platforms/androidtv/project/app/src/kijk/res/mipmap-xhdpi/ic_launcher.png +0 -0
  91. package/dist/templates/platforms/androidtv/project/app/src/kijk/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  92. package/dist/templates/platforms/androidtv/project/app/src/kijk/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  93. package/dist/templates/platforms/androidtv/project/app/src/kijk/res/raw/configuration.json +6 -0
  94. package/dist/templates/platforms/androidtv/project/app/src/kpn/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  95. package/dist/templates/platforms/androidtv/project/app/src/kpn/res/drawable/banner.png +0 -0
  96. package/dist/templates/platforms/androidtv/project/app/src/kpn/res/mipmap-hdpi/ic_launcher.png +0 -0
  97. package/dist/templates/platforms/androidtv/project/app/src/kpn/res/mipmap-mdpi/ic_launcher.png +0 -0
  98. package/dist/templates/platforms/androidtv/project/app/src/kpn/res/mipmap-xhdpi/ic_launcher.png +0 -0
  99. package/dist/templates/platforms/androidtv/project/app/src/kpn/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  100. package/dist/templates/platforms/androidtv/project/app/src/kpn/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  101. package/dist/templates/platforms/androidtv/project/app/src/kpn/res/raw/configuration.json +6 -0
  102. package/dist/templates/platforms/androidtv/project/app/src/main/AndroidManifest.xml +47 -0
  103. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/FlavorBase.kt +12 -0
  104. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/bridge/BridgeFromJavaScript.kt +379 -0
  105. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/bridge/BridgeToJavaScript.kt +65 -0
  106. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/configuration/BridgeConfig.kt +9 -0
  107. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/configuration/ConfigCallback.kt +6 -0
  108. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/configuration/ConfigProvider.kt +27 -0
  109. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/configuration/Drm.kt +10 -0
  110. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/configuration/UserAgent.kt +6 -0
  111. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/BaseApplication.kt +73 -0
  112. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/ActivityComponent.kt +13 -0
  113. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/ActivityModule.kt +19 -0
  114. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/ApplicationComponent.kt +24 -0
  115. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/ApplicationModule.kt +43 -0
  116. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/PerActivity.kt +26 -0
  117. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/HttpMediaDrmCallback.kt +184 -0
  118. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/LocalStorage.kt +30 -0
  119. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/LoggingDrmCallback.kt +46 -0
  120. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/SimpleActivityLifecycleCallback.kt +32 -0
  121. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/jump/JumpAnalytics.kt +209 -0
  122. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/sound/TouchPlayer.kt +86 -0
  123. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/client/BridgeWebView.kt +80 -0
  124. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/client/BridgeWebViewClient.kt +114 -0
  125. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/model/AnalyticsPlaybackInfo.kt +10 -0
  126. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/model/ContentModel.kt +14 -0
  127. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/model/DrmModel.kt +20 -0
  128. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/model/MediaEventType.kt +17 -0
  129. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/parser/ContentModelParser.kt +16 -0
  130. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/parser/DeviceInfoParser.kt +22 -0
  131. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/parser/PlaybackInfoParser.kt +10 -0
  132. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/parser/TrackJsonModelParser.kt +76 -0
  133. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/view/Mainview.kt +22 -0
  134. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/view/PlayerCache.kt +15 -0
  135. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/view/WebViewActivity.kt +279 -0
  136. package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/viewmodel/WebViewModel.kt +569 -0
  137. package/dist/templates/platforms/androidtv/project/app/src/main/res/drawable/banner.png +0 -0
  138. package/dist/templates/platforms/androidtv/project/app/src/main/res/drawable/button_background_focus.xml +10 -0
  139. package/dist/templates/platforms/androidtv/project/app/src/main/res/drawable/button_background_normal.xml +7 -0
  140. package/dist/templates/platforms/androidtv/project/app/src/main/res/drawable/button_background_pressed.xml +7 -0
  141. package/dist/templates/platforms/androidtv/project/app/src/main/res/drawable/button_focus.xml +8 -0
  142. package/dist/templates/platforms/androidtv/project/app/src/main/res/layout/activity_web_view.xml +78 -0
  143. package/dist/templates/platforms/androidtv/project/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  144. package/dist/templates/platforms/androidtv/project/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  145. package/dist/templates/platforms/androidtv/project/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  146. package/dist/templates/platforms/androidtv/project/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  147. package/dist/templates/platforms/androidtv/project/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  148. package/dist/templates/platforms/androidtv/project/app/src/main/res/raw/click.ogg +0 -0
  149. package/dist/templates/platforms/androidtv/project/app/src/main/res/raw/fiddle_root_michal_konecny.cer +0 -0
  150. package/dist/templates/platforms/androidtv/project/app/src/main/res/raw/proxy_milanwilczak.pem +26 -0
  151. package/dist/templates/platforms/androidtv/project/app/src/main/res/values/styles.xml +11 -0
  152. package/dist/templates/platforms/androidtv/project/app/src/main/res/xml/network_security_config.xml +12 -0
  153. package/dist/templates/platforms/androidtv/project/app/src/marti/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  154. package/dist/templates/platforms/androidtv/project/app/src/marti/res/drawable/banner.png +0 -0
  155. package/dist/templates/platforms/androidtv/project/app/src/marti/res/mipmap-hdpi/ic_launcher.png +0 -0
  156. package/dist/templates/platforms/androidtv/project/app/src/marti/res/mipmap-mdpi/ic_launcher.png +0 -0
  157. package/dist/templates/platforms/androidtv/project/app/src/marti/res/mipmap-xhdpi/ic_launcher.png +0 -0
  158. package/dist/templates/platforms/androidtv/project/app/src/marti/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  159. package/dist/templates/platforms/androidtv/project/app/src/marti/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  160. package/dist/templates/platforms/androidtv/project/app/src/marti/res/raw/configuration.json +8 -0
  161. package/dist/templates/platforms/androidtv/project/app/src/newsmax/AndroidManifest.xml +43 -0
  162. package/dist/templates/platforms/androidtv/project/app/src/newsmax/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  163. package/dist/templates/platforms/androidtv/project/app/src/newsmax/res/drawable/banner.png +0 -0
  164. package/dist/templates/platforms/androidtv/project/app/src/newsmax/res/mipmap-hdpi/ic_launcher.png +0 -0
  165. package/dist/templates/platforms/androidtv/project/app/src/newsmax/res/mipmap-mdpi/ic_launcher.png +0 -0
  166. package/dist/templates/platforms/androidtv/project/app/src/newsmax/res/mipmap-xhdpi/ic_launcher.png +0 -0
  167. package/dist/templates/platforms/androidtv/project/app/src/newsmax/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  168. package/dist/templates/platforms/androidtv/project/app/src/newsmax/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  169. package/dist/templates/platforms/androidtv/project/app/src/newsmax/res/raw/configuration.json +7 -0
  170. package/dist/templates/platforms/androidtv/project/app/src/portal/java/com/twentyfouri/tvbridge/Flavor.kt +10 -0
  171. package/dist/templates/platforms/androidtv/project/app/src/portal/res/raw/configuration.json +7 -0
  172. package/dist/templates/platforms/androidtv/project/app/src/portalDrm/java/com/twentyfouri/tvbridge/Flavor.kt +10 -0
  173. package/dist/templates/platforms/androidtv/project/app/src/portalDrm/res/drawable/banner.png +0 -0
  174. package/dist/templates/platforms/androidtv/project/app/src/portalDrm/res/raw/configuration.json +6 -0
  175. package/dist/templates/platforms/androidtv/project/app/src/pureflix/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  176. package/dist/templates/platforms/androidtv/project/app/src/pureflix/res/drawable/banner.png +0 -0
  177. package/dist/templates/platforms/androidtv/project/app/src/pureflix/res/mipmap-hdpi/ic_launcher.png +0 -0
  178. package/dist/templates/platforms/androidtv/project/app/src/pureflix/res/mipmap-mdpi/ic_launcher.png +0 -0
  179. package/dist/templates/platforms/androidtv/project/app/src/pureflix/res/mipmap-xhdpi/ic_launcher.png +0 -0
  180. package/dist/templates/platforms/androidtv/project/app/src/pureflix/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  181. package/dist/templates/platforms/androidtv/project/app/src/pureflix/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  182. package/dist/templates/platforms/androidtv/project/app/src/pureflix/res/raw/configuration.json +6 -0
  183. package/dist/templates/platforms/androidtv/project/app/src/rfa/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  184. package/dist/templates/platforms/androidtv/project/app/src/rfa/res/drawable/banner.png +0 -0
  185. package/dist/templates/platforms/androidtv/project/app/src/rfa/res/mipmap-hdpi/ic_launcher.png +0 -0
  186. package/dist/templates/platforms/androidtv/project/app/src/rfa/res/mipmap-mdpi/ic_launcher.png +0 -0
  187. package/dist/templates/platforms/androidtv/project/app/src/rfa/res/mipmap-xhdpi/ic_launcher.png +0 -0
  188. package/dist/templates/platforms/androidtv/project/app/src/rfa/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  189. package/dist/templates/platforms/androidtv/project/app/src/rfa/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  190. package/dist/templates/platforms/androidtv/project/app/src/rfa/res/raw/configuration.json +7 -0
  191. package/dist/templates/platforms/androidtv/project/app/src/rfe/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  192. package/dist/templates/platforms/androidtv/project/app/src/rfe/res/drawable/banner.png +0 -0
  193. package/dist/templates/platforms/androidtv/project/app/src/rfe/res/mipmap-hdpi/ic_launcher.png +0 -0
  194. package/dist/templates/platforms/androidtv/project/app/src/rfe/res/mipmap-mdpi/ic_launcher.png +0 -0
  195. package/dist/templates/platforms/androidtv/project/app/src/rfe/res/mipmap-xhdpi/ic_launcher.png +0 -0
  196. package/dist/templates/platforms/androidtv/project/app/src/rfe/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  197. package/dist/templates/platforms/androidtv/project/app/src/rfe/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  198. package/dist/templates/platforms/androidtv/project/app/src/rfe/res/raw/configuration.json +6 -0
  199. package/dist/templates/platforms/androidtv/project/app/src/rte/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  200. package/dist/templates/platforms/androidtv/project/app/src/rte/res/drawable/banner.png +0 -0
  201. package/dist/templates/platforms/androidtv/project/app/src/rte/res/mipmap-hdpi/ic_launcher.png +0 -0
  202. package/dist/templates/platforms/androidtv/project/app/src/rte/res/mipmap-mdpi/ic_launcher.png +0 -0
  203. package/dist/templates/platforms/androidtv/project/app/src/rte/res/mipmap-xhdpi/ic_launcher.png +0 -0
  204. package/dist/templates/platforms/androidtv/project/app/src/rte/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  205. package/dist/templates/platforms/androidtv/project/app/src/rte/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  206. package/dist/templates/platforms/androidtv/project/app/src/rte/res/raw/configuration.json +9 -0
  207. package/dist/templates/platforms/androidtv/project/app/src/sentai/google-services.json +191 -0
  208. package/dist/templates/platforms/androidtv/project/app/src/sentai/res/mipmap-hdpi/ic_launcher.png +0 -0
  209. package/dist/templates/platforms/androidtv/project/app/src/sentai/res/mipmap-mdpi/ic_launcher.png +0 -0
  210. package/dist/templates/platforms/androidtv/project/app/src/sentai/res/mipmap-xhdpi/ic_launcher.png +0 -0
  211. package/dist/templates/platforms/androidtv/project/app/src/sentai/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  212. package/dist/templates/platforms/androidtv/project/app/src/sentai/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  213. package/dist/templates/platforms/androidtv/project/app/src/sentai/res/raw/configuration.json +15 -0
  214. package/dist/templates/platforms/androidtv/project/app/src/sentaiandroidtv/google-services.json +191 -0
  215. package/dist/templates/platforms/androidtv/project/app/src/sentaiandroidtv/java/com/twentyfouri/tvbridge/Flavor.kt +54 -0
  216. package/dist/templates/platforms/androidtv/project/app/src/sentaiandroidtv/java/com/twentyfouri/tvbridge/SentaiRequestData.kt +13 -0
  217. package/dist/templates/platforms/androidtv/project/app/src/sentaiandroidtv/res/drawable/banner.png +0 -0
  218. package/dist/templates/platforms/androidtv/project/app/src/sentaiandroidtv/res/mipmap-hdpi/ic_launcher.png +0 -0
  219. package/dist/templates/platforms/androidtv/project/app/src/sentaiandroidtv/res/mipmap-mdpi/ic_launcher.png +0 -0
  220. package/dist/templates/platforms/androidtv/project/app/src/sentaiandroidtv/res/mipmap-xhdpi/ic_launcher.png +0 -0
  221. package/dist/templates/platforms/androidtv/project/app/src/sentaiandroidtv/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  222. package/dist/templates/platforms/androidtv/project/app/src/sentaiandroidtv/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  223. package/dist/templates/platforms/androidtv/project/app/src/sentaiandroidtv/res/raw/configuration.json +14 -0
  224. package/dist/templates/platforms/androidtv/project/app/src/smartott/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  225. package/dist/templates/platforms/androidtv/project/app/src/smartott/res/mipmap-hdpi/ic_launcher.png +0 -0
  226. package/dist/templates/platforms/androidtv/project/app/src/smartott/res/mipmap-mdpi/ic_launcher.png +0 -0
  227. package/dist/templates/platforms/androidtv/project/app/src/smartott/res/mipmap-xhdpi/ic_launcher.png +0 -0
  228. package/dist/templates/platforms/androidtv/project/app/src/smartott/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  229. package/dist/templates/platforms/androidtv/project/app/src/smartott/res/raw/configuration.json +6 -0
  230. package/dist/templates/platforms/androidtv/project/app/src/tennisChannel/java/com/twentyfouri/tvbridge/Flavor.kt +9 -0
  231. package/dist/templates/platforms/androidtv/project/app/src/tennisChannel/res/mipmap-hdpi/ic_launcher.png +0 -0
  232. package/dist/templates/platforms/androidtv/project/app/src/tennisChannel/res/mipmap-mdpi/ic_launcher.png +0 -0
  233. package/dist/templates/platforms/androidtv/project/app/src/tennisChannel/res/mipmap-xhdpi/ic_launcher.png +0 -0
  234. package/dist/templates/platforms/androidtv/project/app/src/tennisChannel/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  235. package/dist/templates/platforms/androidtv/project/app/src/tennisChannel/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  236. package/dist/templates/platforms/androidtv/project/app/src/tennisChannel/res/raw/configuration.json +6 -0
  237. package/dist/templates/platforms/androidtv/project/app/src/topic/java/com/twentyfouri/tvbridge/Flavor.kt +9 -0
  238. package/dist/templates/platforms/androidtv/project/app/src/topic/res/drawable/banner.png +0 -0
  239. package/dist/templates/platforms/androidtv/project/app/src/topic/res/mipmap-hdpi/ic_launcher.png +0 -0
  240. package/dist/templates/platforms/androidtv/project/app/src/topic/res/mipmap-mdpi/ic_launcher.png +0 -0
  241. package/dist/templates/platforms/androidtv/project/app/src/topic/res/mipmap-xhdpi/ic_launcher.png +0 -0
  242. package/dist/templates/platforms/androidtv/project/app/src/topic/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  243. package/dist/templates/platforms/androidtv/project/app/src/topic/res/raw/configuration.json +9 -0
  244. package/dist/templates/platforms/androidtv/project/app/src/voa/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  245. package/dist/templates/platforms/androidtv/project/app/src/voa/res/drawable/banner.png +0 -0
  246. package/dist/templates/platforms/androidtv/project/app/src/voa/res/mipmap-hdpi/ic_launcher.png +0 -0
  247. package/dist/templates/platforms/androidtv/project/app/src/voa/res/mipmap-mdpi/ic_launcher.png +0 -0
  248. package/dist/templates/platforms/androidtv/project/app/src/voa/res/mipmap-xhdpi/ic_launcher.png +0 -0
  249. package/dist/templates/platforms/androidtv/project/app/src/voa/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  250. package/dist/templates/platforms/androidtv/project/app/src/voa/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  251. package/dist/templates/platforms/androidtv/project/app/src/voa/res/raw/configuration.json +7 -0
  252. package/dist/templates/platforms/androidtv/project/app/src/voa365/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  253. package/dist/templates/platforms/androidtv/project/app/src/voa365/res/drawable/banner.png +0 -0
  254. package/dist/templates/platforms/androidtv/project/app/src/voa365/res/mipmap-hdpi/ic_launcher.png +0 -0
  255. package/dist/templates/platforms/androidtv/project/app/src/voa365/res/mipmap-mdpi/ic_launcher.png +0 -0
  256. package/dist/templates/platforms/androidtv/project/app/src/voa365/res/mipmap-xhdpi/ic_launcher.png +0 -0
  257. package/dist/templates/platforms/androidtv/project/app/src/voa365/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  258. package/dist/templates/platforms/androidtv/project/app/src/voa365/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  259. package/dist/templates/platforms/androidtv/project/app/src/voa365/res/raw/configuration.json +7 -0
  260. package/dist/templates/platforms/androidtv/project/app/src/youFone/java/com/twentyfouri/tvbridge/Flavor.kt +5 -0
  261. package/dist/templates/platforms/androidtv/project/app/src/youFone/res/raw/configuration.json +6 -0
  262. package/dist/templates/platforms/androidtv/project/build.gradle +52 -0
  263. package/dist/templates/platforms/androidtv/project/common/build.gradle +38 -0
  264. package/dist/templates/platforms/androidtv/project/common/consumer-rules.pro +0 -0
  265. package/dist/templates/platforms/androidtv/project/common/proguard-rules.pro +21 -0
  266. package/dist/templates/platforms/androidtv/project/common/src/main/AndroidManifest.xml +4 -0
  267. package/dist/templates/platforms/androidtv/project/common/src/main/java/com/twentyfouri/tvbridge/common/IapService.kt +114 -0
  268. package/dist/templates/platforms/androidtv/project/googleiap/build.gradle +40 -0
  269. package/dist/templates/platforms/androidtv/project/googleiap/consumer-rules.pro +0 -0
  270. package/dist/templates/platforms/androidtv/project/googleiap/proguard-rules.pro +21 -0
  271. package/dist/templates/platforms/androidtv/project/googleiap/src/main/AndroidManifest.xml +6 -0
  272. package/dist/templates/platforms/androidtv/project/googleiap/src/main/java/com/twentyfouri/tvbridge/googleiap/GoogleIapService.kt +29 -0
  273. package/dist/templates/platforms/androidtv/project/gradle/wrapper/gradle-wrapper.jar +0 -0
  274. package/dist/templates/platforms/androidtv/project/gradle/wrapper/gradle-wrapper.properties +6 -0
  275. package/dist/templates/platforms/androidtv/project/gradle.properties +5 -0
  276. package/dist/templates/platforms/androidtv/project/keystore/debug_madrid.jks +0 -0
  277. package/dist/templates/platforms/androidtv/project/proguard-rules.pro +42 -0
  278. package/dist/templates/platforms/androidtv/project/settings.gradle +4 -0
  279. package/package.json +3 -2
@@ -0,0 +1,379 @@
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.smartexoplayer.tracks.TrackInfo
10
+ import com.twentyfouri.smartexoplayer.tracks.TrackPreference
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.fromJson
15
+ import com.twentyfouri.tvbridge.webview.parser.TrackJsonModelParser.toJson
16
+ import com.twentyfouri.tvbridge.webview.viewmodel.WebViewModel
17
+ import java.text.SimpleDateFormat
18
+ import java.util.*
19
+ import java.util.concurrent.CountDownLatch
20
+ import java.util.concurrent.TimeUnit
21
+
22
+ @SuppressWarnings("unused")
23
+ class BridgeFromJavaScript(
24
+ private val viewModel: WebViewModel
25
+ ) {
26
+ private val handler = Handler(Looper.getMainLooper())
27
+
28
+ private fun launch(block: () -> Unit) {
29
+ handler.post(block)
30
+ }
31
+
32
+ private fun <T> runBlocking(logName: String? = null, block: () -> T): T? {
33
+ val latch = CountDownLatch(1)
34
+ var result: T? = null
35
+ handler.post {
36
+ result = block()
37
+ latch.countDown()
38
+ }
39
+ try {
40
+ latch.await(100L, TimeUnit.MILLISECONDS)
41
+ Log.v(LOG_TAG, "$logName $result")
42
+ } catch (e: InterruptedException) {
43
+ result = null
44
+ Log.v(LOG_TAG, "$logName TIMEOUT")
45
+ }
46
+ return result
47
+ }
48
+
49
+ /*
50
+ Bridge Android 2 JS to send messages
51
+ */
52
+ @JavascriptInterface
53
+ fun bridgeJavaScriptToAndroid_Message(messageString: String) = launch {
54
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_Message - messageString: $messageString")
55
+ viewModel.showMessage(messageString)
56
+ }
57
+
58
+ /*
59
+ Bridge Js 2 Android to set the video to the player
60
+ */
61
+ @JavascriptInterface
62
+ fun bridgeJavaScriptToAndroid_SetVideoPath(jsonString: String) = launch {
63
+ bridgeJavaScriptToAndroid_SetVideoPath(jsonString, null)
64
+ }
65
+
66
+ @JavascriptInterface
67
+ fun bridgeJavaScriptToAndroid_SetVideoPath(jsonString: String, mimeType: String?) = launch {
68
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SetVideoPath = $jsonString")
69
+ try {
70
+ val contentModel = stringToJson(jsonString)
71
+ contentModel?.streamType = mimeType?.let {
72
+ when {
73
+ mimeType.contains("application/dash+xml") -> "mpd"
74
+ mimeType.contains("application/vnd.apple.mpegurl") -> "m3u8"
75
+ mimeType.contains("video/mp4") -> "mp4"
76
+ mimeType.contains("application/vnd.ms-sstr+xml") -> "ism"
77
+ mimeType.contains("audio/mpeg") -> "mp3"
78
+ else -> null
79
+ }
80
+ }
81
+ if (contentModel?.streamUrl != null) {
82
+ viewModel.setVideo(contentModel)
83
+ }
84
+ } catch (e: Exception) {
85
+ Log.v(LOG_TAG, "bridgeJavaScriptToAndroid_SetVideoPathError - ${e.message}")
86
+ }
87
+ }
88
+
89
+ /*
90
+ Bridge Js 2 Android to pause video object
91
+ */
92
+ @JavascriptInterface
93
+ fun bridgeJavaScriptToAndroid_PlayVideo() = launch {
94
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_PlayVideo")
95
+ viewModel.requestAudioFocus()
96
+ viewModel.startPlayer()
97
+ }
98
+
99
+ /*
100
+ Bridge Js 2 Android to pause video object
101
+ */
102
+ @JavascriptInterface
103
+ fun bridgeJavaScriptToAndroid_PauseVideo() = launch {
104
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_PauseVideo")
105
+ viewModel.pausePlayer()
106
+ }
107
+
108
+
109
+ @JavascriptInterface /*
110
+ Bridge JS 2 Android to stop and reset the player
111
+ */
112
+ fun bridgeJavaScriptToAndroid_StopVideo() = launch {
113
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_StopVideo")
114
+ viewModel.abandonAudioFocus()
115
+ viewModel.stopPlayer()
116
+ }
117
+
118
+ /*
119
+ Request the audio focus to discard background audio from other apps
120
+ */
121
+ @JavascriptInterface
122
+ fun bridgeJavaScriptToAndroid_RequestAudioFocus(): Int = runBlocking("bridgeJavaScriptToAndroid_RequestAudioFocus") {
123
+ viewModel.requestAudioFocus()
124
+ } ?: AudioManager.AUDIOFOCUS_REQUEST_FAILED
125
+
126
+ /*
127
+ Request the audio focus to discard background audio from other apps
128
+ */
129
+ @JavascriptInterface
130
+ fun bridgeJavaScriptToAndroid_AbandonAudioFocus() = launch {
131
+ viewModel.abandonAudioFocus()
132
+ }
133
+
134
+ /*
135
+ Bridge JS 2 Android to get the current time
136
+ */
137
+ @JavascriptInterface
138
+ fun bridgeJavaScriptToAndroid_GetCurrentTime(): Int = runBlocking("bridgeJavaScriptToAndroid_GetCurrentTime") {
139
+ viewModel.currentPosition / 1000
140
+ } ?: 0
141
+
142
+ /*
143
+ Bridge JS 2 Android to get the current time
144
+ */
145
+ @JavascriptInterface
146
+ fun bridgeJavaScriptToAndroid_GetCurrentTimeFloat(): Float = runBlocking("bridgeJavaScriptToAndroid_GetCurrentTimeFloat") {
147
+ viewModel.currentPosition.toFloat() / 1000f
148
+ } ?: 0f
149
+
150
+ /*
151
+ Bridge JS 2 Android to get the current time
152
+ Deprecated - use bridgeJavaScriptToAndroid_SetTrack("false") instead to disable
153
+ */
154
+ @JavascriptInterface
155
+ @Deprecated("")
156
+ fun bridgeJavaScriptToAndroid_setNativeSubtitlesEnabled(subtitlesEnabled: Boolean) = launch {
157
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_setNativeSubtitlesEnabled($subtitlesEnabled)")
158
+ viewModel.setSubtitlesVisibility(subtitlesEnabled)
159
+ }
160
+
161
+ /*
162
+ Bridge JS 2 Android to get the total time
163
+ */
164
+ @JavascriptInterface
165
+ fun bridgeJavaScriptToAndroid_GetTotalTime(): Int = runBlocking("bridgeJavaScriptToAndroid_GetTotalTime") {
166
+ viewModel.duration / 1000
167
+ } ?: 0
168
+
169
+ /*
170
+ Bridge JS 2 Android to seek to the time in seconds
171
+ @param seconds time to seek in seconds
172
+ */
173
+ @JavascriptInterface
174
+ fun bridgeJavaScriptToAndroid_SeekTo(seconds: Int) = launch {
175
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SeekTo($seconds)")
176
+ viewModel.seekToPosition(seconds * 1000)
177
+ }
178
+
179
+ /*
180
+ Bridge JS 2 Android to get if the player is playing
181
+ */
182
+ @JavascriptInterface
183
+ fun bridgeJavaScriptToAndroid_IsPlaying(): Boolean = runBlocking("bridgeJavaScriptToAndroid_IsPlaying") {
184
+ viewModel.isPlayerPlaying
185
+ } ?: false
186
+
187
+ /*
188
+ Bridge JS 2 Android to get if the player is presented to user
189
+ */
190
+ @JavascriptInterface
191
+ fun bridgeJavaScriptToAndroid_IsInPlayer(): Boolean = runBlocking("bridgeJavaScriptToAndroid_IsInPlayer") {
192
+ viewModel.isInPlayer
193
+ } ?: false
194
+
195
+
196
+ /*
197
+ Bridge JS 2 Android to put the video in fullscreen mode
198
+ */
199
+ @JavascriptInterface
200
+ fun bridgeJavaScriptToAndroid_FullScreenVideo() = launch {
201
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_FullScreenVideo")
202
+ viewModel.requestAudioFocus()
203
+ viewModel.enableFullScreen()
204
+ }
205
+
206
+
207
+ /*
208
+ Bridge JS 2 Android to set the video layout measures
209
+ @param width size in px
210
+ * @param height size in px
211
+ * @param left position in px
212
+ * @param top position in px
213
+ */
214
+ @JavascriptInterface
215
+ fun bridgeJavaScriptToAndroid_SetVideoLayout(width: Int, height: Int, left: Int, top: Int) = launch {
216
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_PartialScreenVideo $width $height $left $top")
217
+ viewModel.disableFullScreen(width, height, left, top)
218
+ }
219
+
220
+
221
+ /*
222
+ Bridge JS 2 Android to go back and reset the view
223
+ */
224
+ @JavascriptInterface
225
+ fun bridgeJavaScriptToAndroid_Back() = launch {
226
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_Back")
227
+ viewModel.onBackPressed()
228
+ }
229
+
230
+ /*
231
+ Set the new SUBTITLE track to the player
232
+ */
233
+ @JavascriptInterface
234
+ fun bridgeJavaScriptToAndroid_SetTrack(trackJson: String) = launch {
235
+ if (trackJson == "") {
236
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SetTrack empty => DEFAULT")
237
+ viewModel.setSubtitleTrack(TrackPreference.DEFAULT)
238
+ } else if (trackJson == "false") {
239
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SetTrack false => DISABLED")
240
+ viewModel.setSubtitleTrack(TrackPreference.DISABLED)
241
+ } else {
242
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SetTrack $trackJson")
243
+ viewModel.setSubtitleTrack(fromJson(trackJson))
244
+ }
245
+ }
246
+
247
+ /*
248
+ Set the new AUDIO track to the player
249
+ */
250
+ @JavascriptInterface
251
+ fun bridgeJavaScriptToAndroid_SetAudioTrack(trackJson: String?) = launch {
252
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SetAudioTrack ${trackJson ?: "(none)"}")
253
+ viewModel.setAudioTrack(fromJson(trackJson))
254
+ }
255
+
256
+ /*
257
+ Returns current AUDIO track to the player
258
+ */
259
+ @JavascriptInterface
260
+ fun bridgeJavaScriptToAndroid_getCurrentAudioTrack(): String? = runBlocking("bridgeJavaScriptToAndroid_getCurrentAudioTrack") {
261
+ viewModel.audioTrack?.let { toJson(it) } ?: DISABLED_AUDIO_TRACK
262
+ }
263
+
264
+ /*
265
+ Returns current AUDIO track to the player
266
+ */
267
+ @JavascriptInterface
268
+ fun bridgeJavaScriptToAndroid_getCurrentSubtitleTrack(): String? = runBlocking("bridgeJavaScriptToAndroid_getCurrentSubtitleTrack") {
269
+ viewModel.subtitleTrack?.let { toJson(it) } ?: DISABLED_SUBTITLE_TRACK
270
+ }
271
+
272
+ /*
273
+ Set the cookies to localstorage
274
+ */
275
+ @JavascriptInterface
276
+ fun bridgeJavaScriptToAndroid_SaveToLocalStorage(key: String?, value: String?) = launch {
277
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SaveToLocalStorage")
278
+ viewModel.saveToLocalStorage(key, value)
279
+ }
280
+
281
+ /*
282
+ clears the cookies from localstorage
283
+ */
284
+ @JavascriptInterface
285
+ fun bridgeJavaScriptToAndroid_RemoveFromLocalStorage(key: String?) = launch {
286
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_RemoveFromLocalStorage")
287
+ viewModel.removeFromLocalStorage(key)
288
+ }
289
+
290
+ /*
291
+ Gets the cookies
292
+ */
293
+ @JavascriptInterface
294
+ fun bridgeJavaScriptToAndroid_GetFromLocalStorage(key: String?): String? = runBlocking("bridgeJavaScriptToAndroid_GetFromLocalStorage") {
295
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_GetFromLocalStorage")
296
+ viewModel.getFromLocalStorage(key)
297
+ }
298
+
299
+ /***
300
+ * Bridget JS 2 Android to get the device information
301
+ */
302
+ @JavascriptInterface
303
+ fun bridgeJavaScriptToAndroid_GetDeviceInfo(): String? {
304
+ return deviceInfoParsed
305
+ }
306
+
307
+ @JavascriptInterface
308
+ fun bridgeJavaScriptToAndroid_SetPlaybackInfo(playbackInfo: String) = launch {
309
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_SetPlaybackInfo($playbackInfo)")
310
+ viewModel.setPlaybackInfo(parse(playbackInfo))
311
+ }
312
+
313
+ @JavascriptInterface
314
+ fun bridgeJavaScriptToAndroid_SignData(dataJson: String?): String? {
315
+ // Log.v(LOG_TAG, "bridgeJavaScriptToAndroid_SignData dataJson = " + dataJson);
316
+ return viewModel.signData(dataJson)
317
+ }
318
+
319
+ @JavascriptInterface
320
+ fun bridgeJavaScriptToAndroid_GetCurrentDateTime(): String? {
321
+ return SimpleDateFormat().toLocalizedPattern()
322
+ }
323
+
324
+ @JavascriptInterface
325
+ fun bridgeReceiptAmazonIAPValidation(sku: String?) {
326
+ bridgeReceiptIAPValidation(sku)
327
+ }
328
+
329
+ @JavascriptInterface
330
+ fun bridgeReceiptIAPValidation(sku: String?) = launch {
331
+ Log.d(LOG_TAG, "bridgeReceiptIAPValidation")
332
+ viewModel.launchIapPurchase(sku)
333
+ }
334
+
335
+ /***
336
+ * Bridget JS 2 Android to check skus detail
337
+ *
338
+ * @param skus SKUS
339
+ */
340
+ @JavascriptInterface
341
+ fun bridgeJavaScriptToAndroid_getInAppProductDetail(skus: Array<String>) {
342
+ Log.d(LOG_TAG, "bridgeJavaScriptToAndroid_getProductDetail SKU: " + Arrays.toString(skus))
343
+ viewModel.getIapProductDetails(skus.toList())
344
+ }
345
+
346
+ /***
347
+ * Bridget JS 2 Android to validate a receipt
348
+ */
349
+ @JavascriptInterface
350
+ fun bridgeReceiptAmazonIAPValidated(receiptId: String?) {
351
+ bridgeReceiptIAPValidated(receiptId)
352
+ }
353
+
354
+ @JavascriptInterface
355
+ fun bridgeReceiptIAPValidated(receiptId: String?) {
356
+ Log.d(LOG_TAG, "bridgeReceiptIAPValidated receiptId=$receiptId")
357
+ viewModel.acknowledgeIapReceipt(receiptId ?: "")
358
+ }
359
+
360
+ /***
361
+ * Bridget JS 2 Android to get the old IAP receipts
362
+ */
363
+ @JavascriptInterface
364
+ fun bridgeGetHistoricPurchases(): String? {
365
+ // I think this is not needed, but might come back in future
366
+ // return AmazonIAPListener.getInstance().getIAPManager().getHistoricPurchases().toString();
367
+ return ""
368
+ }
369
+
370
+ companion object {
371
+ const val LOG_TAG = "JavaScriptBridge"
372
+ val DISABLED_AUDIO_TRACK = JsonObject().apply {
373
+ addProperty("type", TrackInfo.TYPE_AUDIO)
374
+ }.toString()
375
+ val DISABLED_SUBTITLE_TRACK = JsonObject().apply {
376
+ addProperty("type", TrackInfo.TYPE_SUBTITLES)
377
+ }.toString()
378
+ }
379
+ }
@@ -0,0 +1,65 @@
1
+ package com.twentyfouri.tvbridge.bridge
2
+
3
+ import android.util.Log
4
+ import com.twentyfouri.smartexoplayer.tracks.TrackInfo
5
+ import com.twentyfouri.tvbridge.bridge.BridgeFromJavaScript.Companion.LOG_TAG
6
+ import com.twentyfouri.tvbridge.webview.parser.TrackJsonModelParser.toJson
7
+
8
+ class BridgeToJavaScript(
9
+ private val executeJavaScript: (String) -> Unit
10
+ ) {
11
+ /**
12
+ * Android 2 JavaScript keyevent Event. Dispatch key custom event to the page document element
13
+ *
14
+ * @param keyCode the keycode which is being sent from the Android code.
15
+ * @param keyEvent the keyevent which is being sent from the Android code.
16
+ */
17
+ fun bridgeAndroidToJavaScript_KeyEvent(keyCode: Int, keyEvent: String) {
18
+ Log.d(LOG_TAG, "bridgeAndroidToJavaScript_KeyEvent keyCode = $keyCode, keyEvent = $keyEvent")
19
+ executeJavaScript("javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('$keyEvent',true,true);evt.keyCode=$keyCode;evt.which=$keyCode;document.dispatchEvent(evt);})())")
20
+ }
21
+
22
+ /**
23
+ * Android 2 JavaScript media Event. Dispatch key custom event to the page document element
24
+ *
25
+ * @param mediaEvent the mediaEvent which is being sent from the Android code.
26
+ */
27
+ fun bridgeAndroidToJavaScript_MediaEvent(mediaEvent: String) {
28
+ Log.d(LOG_TAG, "bridgeAndroidToJavaScript_MediaEvent $mediaEvent")
29
+ executeJavaScript("javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('$mediaEvent',true,true);document.dispatchEvent(evt);})())")
30
+ }
31
+
32
+ /**
33
+ * Android 2 JavaScript media Event. Dispatch key custom event to the page document element
34
+ *
35
+ * @param mediaEvent the mediaEvent
36
+ * @param tracks tracks from the players stream.
37
+ */
38
+ fun bridgeAndroidToJavaScript_MediaTrackEvent(mediaEvent: String, tracks: List<TrackInfo>) {
39
+ val tracksJson = toJson(tracks)
40
+ Log.d(LOG_TAG, tracksJson)
41
+ val mediaEventString = "javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('$mediaEvent',true,true);evt.tracks='$tracksJson';document.dispatchEvent(evt);})())"
42
+ Log.v(LOG_TAG, mediaEventString)
43
+ executeJavaScript(mediaEventString)
44
+ }
45
+
46
+ fun bridgeAndroidToJavaScript_IAPValidationError(message: String) {
47
+ Log.d(LOG_TAG, "bridgeAndroidToJavaScript_IAPValidationError")
48
+ executeJavaScript("javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('iapError',true,true);evt.message='$message';document.dispatchEvent(evt);})())")
49
+ }
50
+
51
+ fun bridgeAndroidToJavaScript_IAPValidationSuccess(userId: String, receiptId: String, sku: String) {
52
+ Log.d(LOG_TAG, "bridgeAndroidToJavaScript_IAPValidationSuccess sku=$sku receiptId=$receiptId")
53
+ executeJavaScript("javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('iapSuccess',true,true);evt.userId='$userId';evt.receiptId='$receiptId';evt.sku='$sku';document.dispatchEvent(evt);})())")
54
+ }
55
+
56
+ fun bridgeIAPGetProductDataSuccess(okSkus: String, badSkus: String) {
57
+ Log.d(LOG_TAG, "bridgeIAPGetProductDataSuccess ok=$okSkus bad=$badSkus")
58
+ executeJavaScript("javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('onInAppProductDetailSuccess',true,true);evt.okSkus=$okSkus;evt.badSkus=$badSkus;document.dispatchEvent(evt);})())")
59
+ }
60
+
61
+ fun bridgeIAPGetProductDataFail(reason: String) {
62
+ Log.d(LOG_TAG, "bridgeIAPGetProductDataFail")
63
+ executeJavaScript("javascript:((function dispatchEvent(){var evt = document.createEvent('Events');evt.initEvent('onInAppProductDetailError',true,true);evt.message='$reason';document.dispatchEvent(evt);})())")
64
+ }
65
+ }
@@ -0,0 +1,9 @@
1
+ package com.twentyfouri.tvbridge.configuration
2
+
3
+ class BridgeConfig {
4
+ var baseUrl: String = "http://portal.24imedia.tv/"
5
+ var userAgent: UserAgent = UserAgent()
6
+ var drm: Drm = Drm()
7
+ var isEnabledTouchSound: Boolean = false
8
+ var playerAppName: String? = null
9
+ }
@@ -0,0 +1,6 @@
1
+ package com.twentyfouri.tvbridge.configuration
2
+
3
+ interface ConfigCallback {
4
+ fun onConfigLoaded(config: BridgeConfig?)
5
+ fun onConfigError(error: String?)
6
+ }
@@ -0,0 +1,27 @@
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
+ }
@@ -0,0 +1,10 @@
1
+ package com.twentyfouri.tvbridge.configuration
2
+
3
+ class Drm {
4
+ private var overrideDrmCallback = false
5
+
6
+ var isMultiSessionEnabled = false
7
+
8
+ fun shouldOverrideDrmCallback(): Boolean =
9
+ overrideDrmCallback
10
+ }
@@ -0,0 +1,6 @@
1
+ package com.twentyfouri.tvbridge.configuration
2
+
3
+ class UserAgent {
4
+ var isUseFixedUserAgent = false
5
+ var value: String? = null
6
+ }
@@ -0,0 +1,73 @@
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
+ }
@@ -0,0 +1,13 @@
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
+ }
@@ -0,0 +1,19 @@
1
+ package com.twentyfouri.tvbridge.global.di
2
+
3
+ import android.app.Activity
4
+ import com.twentyfouri.smartexoplayer.SmartPlayerFactory
5
+ import dagger.Module
6
+ import dagger.Provides
7
+
8
+ @Module
9
+ class ActivityModule(
10
+ private val activity: Activity
11
+ ) {
12
+ @Provides
13
+ fun provideActivity() =
14
+ activity
15
+
16
+ @Provides
17
+ fun providePlayerFactory() =
18
+ SmartPlayerFactory(activity)
19
+ }
@@ -0,0 +1,24 @@
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
+ }
@@ -0,0 +1,43 @@
1
+ package com.twentyfouri.tvbridge.global.di
2
+
3
+ import android.content.Context
4
+ import com.twentyfouri.tvbridge.Flavor
5
+ import com.twentyfouri.tvbridge.common.NullIapService
6
+ import com.twentyfouri.tvbridge.configuration.BridgeConfig
7
+ import com.twentyfouri.tvbridge.global.BaseApplication
8
+ import com.twentyfouri.tvbridge.global.utils.LocalStorage
9
+ import com.twentyfouri.tvbridge.sound.TouchPlayer
10
+ import dagger.Module
11
+ import dagger.Provides
12
+ import javax.inject.Singleton
13
+
14
+ @Module
15
+ class ApplicationModule(
16
+ private val baseApplication: BaseApplication,
17
+ private val configuration: BridgeConfig
18
+ ) {
19
+ @Provides
20
+ fun getApplication() = baseApplication
21
+
22
+ @Provides
23
+ fun getConfiguration() = configuration
24
+
25
+ @Provides
26
+ fun provideApplicationContext(): Context = baseApplication
27
+
28
+ @Singleton
29
+ @Provides
30
+ fun provideLocalStorage() = LocalStorage(baseApplication.applicationContext)
31
+
32
+ @Singleton
33
+ @Provides
34
+ fun provideTouchPlayer() = TouchPlayer(baseApplication)
35
+
36
+ @Singleton
37
+ @Provides
38
+ fun provideIapService() = Flavor()
39
+ .getIapServiceFactories()
40
+ .firstOrNull { it.detectSupport(baseApplication) }
41
+ ?.build(baseApplication)
42
+ ?: NullIapService()
43
+ }