@24i/smartapps-bigscreen-rnv-build-engine 0.17.6-alpha.8 → 0.17.6
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/README.md +16 -12
- package/dist/src/constants/buildProductionPackages.js +1 -0
- package/dist/src/constants/delopyLivePlatforms.js +2 -1
- package/dist/src/constants/platforms.js +2 -0
- package/dist/src/engine.js +10 -0
- package/dist/src/resolvers/index.js +3 -1
- package/dist/src/resolvers/resolveBaseUrl.js +5 -24
- package/dist/src/resolvers/resolveProductionZipFileRelativePath.js +1 -2
- package/dist/src/resolvers/resolveS3BucketAppPath.js +15 -0
- package/dist/src/resolvers/shared/constructFullUrl.js +25 -0
- package/dist/src/scripts/buildAllWithSchemes.js +23 -4
- package/dist/src/scripts/release/appCenter/deployProductionPackagesToAppCenter.js +20 -10
- package/dist/src/scripts/release/urlsMarkdown.js +2 -0
- package/dist/src/scripts/releaseAllWithSchemes.js +3 -2
- package/dist/src/sdks/index.js +1 -0
- package/dist/src/sdks/sdk-androidtv/sdkAndroidtv.js +25 -9
- package/dist/src/sdks/sdk-tizen/sdkTizen.js +2 -0
- package/dist/src/sdks/sdk-webos/sdkWebos.js +2 -0
- package/dist/src/sdks/sdk-webpack/sdkWebpack.js +2 -0
- package/dist/src/tasks/deploy/aswS3/deployS3.js +3 -10
- package/dist/src/tasks/deploy/aswS3/distToLiveS3.js +4 -5
- package/dist/src/tasks/deploy/hbbtv/deployHbbtv.js +1 -1
- package/dist/src/tasks/task.rnv.build.js +16 -6
- package/dist/src/tasks/task.rnv.configure.js +2 -0
- package/dist/src/tasks/task.rnv.deploy.js +2 -0
- package/dist/src/tasks/task.rnv.platform.configure.js +33 -1
- package/dist/src/tasks/task.rnv.start.js +2 -0
- package/dist/src/utils/copyTheoPlayerLibs.js +48 -0
- package/dist/src/utils/zipStagingProdBuildsByPlatforms.js +3 -3
- package/dist/templates/platforms/androidtv/project/amazoniap/build.gradle +2 -2
- package/dist/templates/platforms/androidtv/project/app/build.gradle +17 -21
- package/dist/templates/platforms/androidtv/project/app/proguard-rules.pro +15 -0
- package/dist/templates/platforms/androidtv/project/app/src/bigscreenAppstage/res/raw/configuration.json +1 -2
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/bridge/BridgeFromJavaScript.kt +4 -58
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/bridge/BridgeToJavaScript.kt +15 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/configuration/BridgeConfig.kt +2 -1
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/ActivityModule.kt +0 -3
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/ApplicationModule.kt +2 -2
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/di/PerActivity.kt +0 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/PlayerFactoryConfigured.kt +33 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/PlayerFactoryExoPlayerCustomized.kt +7 -1
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/PlayerFactoryTheoPlayerCustomized.kt +14 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/PlayerFactoryVersion.kt +27 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/global/utils/SourceDrmOverridden.kt +42 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/model/MediaEventType.kt +3 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/parser/SourceParser.kt +89 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/view/Mainview.kt +0 -3
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/view/PlayerCache.kt +2 -2
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/view/WebViewActivity.kt +24 -83
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/viewmodel/WebViewModel.kt +48 -111
- package/dist/templates/platforms/androidtv/project/app/src/main/res/layout/activity_web_view.xml +23 -71
- package/dist/templates/platforms/androidtv/project/common/build.gradle +2 -2
- package/dist/templates/platforms/androidtv/project/googleiap/build.gradle +2 -2
- package/package.json +1 -1
- package/renative.engine.json +2 -0
- 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/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
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
package com.twentyfouri.tvbridge.global.utils
|
|
2
2
|
|
|
3
|
+
import com.twentyfouri.player.base.Source
|
|
3
4
|
import com.twentyfouri.player.base.SourceAuthorization
|
|
4
5
|
import com.twentyfouri.player.base.SourceDrm
|
|
6
|
+
import com.twentyfouri.player.base.SourceDrmPlayready
|
|
7
|
+
import com.twentyfouri.player.base.SourceDrmWidevine
|
|
8
|
+
import com.twentyfouri.player.base.buildUpon
|
|
5
9
|
import java.net.URI
|
|
6
10
|
|
|
7
11
|
open class SourceDrmOverridden protected constructor(
|
|
@@ -33,6 +37,17 @@ open class SourceDrmOverridden protected constructor(
|
|
|
33
37
|
var forceLicenseServer: Boolean = false
|
|
34
38
|
var authorization: SourceAuthorization? = null
|
|
35
39
|
|
|
40
|
+
open fun applyFrom(source: SourceDrm) {
|
|
41
|
+
when (source) {
|
|
42
|
+
is SourceDrmOverridden -> applyFrom(source)
|
|
43
|
+
is SourceDrmWidevine -> applyFrom(source)
|
|
44
|
+
is SourceDrmPlayready -> applyFrom(source)
|
|
45
|
+
else -> {
|
|
46
|
+
packageName = source.packageName
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
36
51
|
open fun applyFrom(source: SourceDrmOverridden) {
|
|
37
52
|
packageName = source.packageName
|
|
38
53
|
licenseServer = source.licenseServer
|
|
@@ -40,9 +55,36 @@ open class SourceDrmOverridden protected constructor(
|
|
|
40
55
|
authorization = source.authorization
|
|
41
56
|
}
|
|
42
57
|
|
|
58
|
+
open fun applyFrom(source: SourceDrmWidevine) {
|
|
59
|
+
packageName = source.packageName
|
|
60
|
+
licenseServer = source.licenseServer
|
|
61
|
+
forceLicenseServer = source.forceLicenseServer
|
|
62
|
+
authorization = source.authorization
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
open fun applyFrom(source: SourceDrmPlayready) {
|
|
66
|
+
packageName = source.packageName
|
|
67
|
+
licenseServer = source.licenseServer
|
|
68
|
+
forceLicenseServer = source.forceLicenseServer
|
|
69
|
+
authorization = source.authorization
|
|
70
|
+
}
|
|
71
|
+
|
|
43
72
|
override fun build() =
|
|
44
73
|
SourceDrmOverridden(this)
|
|
45
74
|
}
|
|
75
|
+
|
|
76
|
+
companion object {
|
|
77
|
+
fun replaceSource(source: Source): Source {
|
|
78
|
+
if (source.drm.isEmpty()) return source
|
|
79
|
+
return source.buildUpon {
|
|
80
|
+
drm = drm.mapTo(mutableListOf()) { sourceDrm ->
|
|
81
|
+
SourceDrmOverridden {
|
|
82
|
+
applyFrom(sourceDrm)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
46
88
|
}
|
|
47
89
|
|
|
48
90
|
inline fun SourceDrmOverridden(block: SourceDrmOverridden.Builder.() -> Unit) =
|
|
@@ -19,4 +19,7 @@ object MediaEventType {
|
|
|
19
19
|
const val KEY_UP = "keyup"
|
|
20
20
|
const val KEY_DOWN = "keydown"
|
|
21
21
|
const val TRACKS_CHANGED = "tracksChanged"
|
|
22
|
+
const val AD_BREAK_START = "adbreakstart"
|
|
23
|
+
const val AD_BREAK_END = "adbreakend"
|
|
24
|
+
const val AD_BREAKS_RESCHEDULED = "adbreaksrescheduled"
|
|
22
25
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
package com.twentyfouri.tvbridge.webview.parser
|
|
2
|
+
|
|
3
|
+
import com.twentyfouri.player.base.*
|
|
4
|
+
import com.twentyfouri.tvbridge.global.utils.SourceDrmOverridden
|
|
5
|
+
import org.json.JSONException
|
|
6
|
+
import org.json.JSONObject
|
|
7
|
+
import java.net.URI
|
|
8
|
+
import java.util.UUID
|
|
9
|
+
|
|
10
|
+
object SourceParser {
|
|
11
|
+
private val sourceSerializer = DefaultSourceSerializer()
|
|
12
|
+
|
|
13
|
+
fun stringToJson(jsonString: String?): Source? {
|
|
14
|
+
if (jsonString.isNullOrEmpty()) return null
|
|
15
|
+
if (jsonString.startsWith("http://") || jsonString.startsWith("https://")) {
|
|
16
|
+
return Source {
|
|
17
|
+
url = URI(jsonString)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
val jsonSource = JSONObject(jsonString)
|
|
23
|
+
if (jsonSource.has("streamUrl")) {
|
|
24
|
+
return parseContentModel(jsonSource)
|
|
25
|
+
}
|
|
26
|
+
return sourceSerializer.toSource(jsonSource)
|
|
27
|
+
|
|
28
|
+
} catch (e: JSONException) {
|
|
29
|
+
return null
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
private fun parseContentModel(jsonSource: JSONObject): Source? {
|
|
34
|
+
return Source {
|
|
35
|
+
val streamUrl = jsonSource.getString("streamUrl", null)
|
|
36
|
+
if (streamUrl.isNullOrEmpty()) return null
|
|
37
|
+
url = URI(streamUrl)
|
|
38
|
+
|
|
39
|
+
mimeType = jsonSource.getString("streamType", null)
|
|
40
|
+
?.let { MimeType.parse(it) }
|
|
41
|
+
|
|
42
|
+
jsonSource.getObject("drmConfig") { parseDrmModel(it) }
|
|
43
|
+
?.also { drm.add(it) }
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private fun parseDrmModel(jsonDrm: JSONObject): SourceDrm? {
|
|
48
|
+
val drmSchemeUuid = jsonDrm.getString("drmSchemeUuid", null)
|
|
49
|
+
val drmLicenseUri = jsonDrm.getString("drmLicenseUrl", null)
|
|
50
|
+
?.let { URI(it) }
|
|
51
|
+
val drmCustomData = jsonDrm.getObject("drmCustomData") { parseSourceAuthorization (it) }
|
|
52
|
+
val overrideDrmCallback = jsonDrm.getBoolean("overrideDrmCallback")
|
|
53
|
+
|
|
54
|
+
return if (overrideDrmCallback) {
|
|
55
|
+
SourceDrmOverridden {
|
|
56
|
+
packageName = when (drmSchemeUuid) {
|
|
57
|
+
"widevine", WIDEVINE_UUID -> DrmWidevine.packageName
|
|
58
|
+
"playready", PLAYREADY_UUID -> DrmPlayready.packageName
|
|
59
|
+
else -> null
|
|
60
|
+
}
|
|
61
|
+
licenseServer = drmLicenseUri
|
|
62
|
+
authorization = drmCustomData
|
|
63
|
+
}
|
|
64
|
+
} else {
|
|
65
|
+
when (drmSchemeUuid) {
|
|
66
|
+
"widevine", WIDEVINE_UUID -> SourceDrmWidevine {
|
|
67
|
+
licenseServer = drmLicenseUri
|
|
68
|
+
authorization = drmCustomData
|
|
69
|
+
}
|
|
70
|
+
"playready", PLAYREADY_UUID -> SourceDrmPlayready {
|
|
71
|
+
licenseServer = drmLicenseUri
|
|
72
|
+
authorization = drmCustomData
|
|
73
|
+
}
|
|
74
|
+
else -> null
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
private fun parseSourceAuthorization(jsonMap: JSONObject): SourceAuthorization? {
|
|
80
|
+
return SourceAuthorizationHeaders {
|
|
81
|
+
jsonMap.keys().forEach { key ->
|
|
82
|
+
headers[key] = jsonMap.getString(key)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
val WIDEVINE_UUID = "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
|
|
88
|
+
val PLAYREADY_UUID = "9a04f079-9840-4286-ab92-e65be0885f95"
|
|
89
|
+
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
package com.twentyfouri.tvbridge.webview.view
|
|
2
2
|
|
|
3
|
-
import com.twentyfouri.player.base.PlayerBase
|
|
4
|
-
|
|
5
3
|
/**
|
|
6
4
|
* Created by destivar on 15/02/16.
|
|
7
5
|
*/
|
|
@@ -9,7 +7,6 @@ interface Mainview {
|
|
|
9
7
|
fun loadUrl(url: String?)
|
|
10
8
|
fun goFullscreen()
|
|
11
9
|
fun exitFullscreen(width: Int, height: Int, left: Int, top: Int)
|
|
12
|
-
fun setUrlToView(urlString: String?)
|
|
13
10
|
fun setBlackCurtainVisibility(visibility: Int)
|
|
14
11
|
fun showMessage(message: String?)
|
|
15
12
|
fun requestAudioFocus(): Int
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
package com.twentyfouri.tvbridge.webview.view
|
|
2
2
|
|
|
3
|
-
import com.twentyfouri.
|
|
3
|
+
import com.twentyfouri.player.base.Source
|
|
4
4
|
|
|
5
5
|
class PlayerCache {
|
|
6
6
|
enum class PlayerState {
|
|
@@ -11,5 +11,5 @@ class PlayerCache {
|
|
|
11
11
|
var savedPlayerPosition: Double = 0.0
|
|
12
12
|
var savedPlayerDuration: Double = 0.0
|
|
13
13
|
var savedPlayerState: PlayerState? = null
|
|
14
|
-
var
|
|
14
|
+
var savedSource: Source? = null
|
|
15
15
|
}
|
|
@@ -2,9 +2,6 @@ package com.twentyfouri.tvbridge.webview.view
|
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.app.Activity
|
|
5
|
-
import android.content.Intent
|
|
6
|
-
import android.graphics.Bitmap
|
|
7
|
-
import android.graphics.Canvas
|
|
8
5
|
import android.graphics.Point
|
|
9
6
|
import android.media.AudioManager
|
|
10
7
|
import android.media.AudioManager.OnAudioFocusChangeListener
|
|
@@ -14,10 +11,9 @@ import android.text.TextWatcher
|
|
|
14
11
|
import android.util.Log
|
|
15
12
|
import android.view.KeyEvent
|
|
16
13
|
import android.view.View
|
|
14
|
+
import android.view.View.MeasureSpec
|
|
17
15
|
import android.view.WindowManager
|
|
18
16
|
import android.view.inputmethod.InputMethodManager
|
|
19
|
-
import android.webkit.WebChromeClient
|
|
20
|
-
import android.webkit.WebView
|
|
21
17
|
import android.widget.RelativeLayout
|
|
22
18
|
import android.widget.Toast
|
|
23
19
|
import androidx.appcompat.app.AppCompatActivity
|
|
@@ -25,7 +21,6 @@ import androidx.databinding.DataBindingUtil
|
|
|
25
21
|
import androidx.media.AudioAttributesCompat
|
|
26
22
|
import androidx.media.AudioFocusRequestCompat
|
|
27
23
|
import androidx.media.AudioManagerCompat
|
|
28
|
-
import com.twentyfouri.tvbridge.BuildConfig
|
|
29
24
|
import com.twentyfouri.tvbridge.R
|
|
30
25
|
import com.twentyfouri.tvbridge.configuration.BridgeConfig
|
|
31
26
|
import com.twentyfouri.tvbridge.databinding.ActivityWebViewBinding
|
|
@@ -76,36 +71,14 @@ class WebViewActivity : AppCompatActivity(), Mainview {
|
|
|
76
71
|
CookieHandler.setDefault(defaultCookieManager)
|
|
77
72
|
}
|
|
78
73
|
|
|
79
|
-
binding =
|
|
80
|
-
binding.
|
|
81
|
-
binding.
|
|
74
|
+
binding = ActivityWebViewBinding.inflate(layoutInflater)
|
|
75
|
+
setContentView(binding.root)
|
|
76
|
+
binding.playerView.playerFactory = viewModel.playerFactory
|
|
82
77
|
viewModel.attachView(this)
|
|
83
78
|
viewModel.configureWebView(binding.webview)
|
|
84
|
-
viewModel.player = binding.
|
|
79
|
+
viewModel.player = binding.playerView.player
|
|
85
80
|
|
|
86
|
-
|
|
87
|
-
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
|
|
88
|
-
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
|
|
89
|
-
viewModel.appUrl = s.toString()
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
override fun afterTextChanged(s: Editable) {}
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
val appUrl = config.baseUrl
|
|
96
|
-
if (config.customizableUrl) {
|
|
97
|
-
viewModel.urlSetterVisible = true
|
|
98
|
-
viewModel.appUrl = appUrl
|
|
99
|
-
setUrlToView(appUrl)
|
|
100
|
-
} else {
|
|
101
|
-
viewModel.urlSetterVisible = false
|
|
102
|
-
loadUrl(appUrl)
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
binding.root.viewTreeObserver.addOnGlobalFocusChangeListener { oldFocus: View, newFocus: View ->
|
|
106
|
-
Log.v("FOCUS", "global focus changed old = $oldFocus")
|
|
107
|
-
Log.v("FOCUS", "global focus changed new = $newFocus")
|
|
108
|
-
}
|
|
81
|
+
loadUrl(config.baseUrl)
|
|
109
82
|
|
|
110
83
|
initialized = true
|
|
111
84
|
}
|
|
@@ -170,13 +143,12 @@ class WebViewActivity : AppCompatActivity(), Mainview {
|
|
|
170
143
|
public override fun onDestroy() {
|
|
171
144
|
if (initialized) {
|
|
172
145
|
viewModel.releasePlayer()
|
|
173
|
-
binding.unbind()
|
|
174
146
|
}
|
|
175
147
|
super.onDestroy()
|
|
176
148
|
}
|
|
177
149
|
|
|
178
150
|
override fun goFullscreen() {
|
|
179
|
-
val layoutParams = binding.
|
|
151
|
+
val layoutParams = binding.playerView.layoutParams as RelativeLayout.LayoutParams
|
|
180
152
|
layoutParams.width = -1
|
|
181
153
|
layoutParams.height = -1
|
|
182
154
|
layoutParams.leftMargin = 0
|
|
@@ -187,8 +159,12 @@ class WebViewActivity : AppCompatActivity(), Mainview {
|
|
|
187
159
|
display.getSize(size)
|
|
188
160
|
val width = size.x
|
|
189
161
|
val height = size.y
|
|
190
|
-
binding.
|
|
191
|
-
binding.
|
|
162
|
+
binding.playerView.layoutParams = layoutParams
|
|
163
|
+
binding.playerView.measure(
|
|
164
|
+
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
|
|
165
|
+
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
|
|
166
|
+
)
|
|
167
|
+
binding.playerView.layout(width, height, 0, 0)
|
|
192
168
|
}
|
|
193
169
|
|
|
194
170
|
override fun launchIapPurchase(sku: String) {
|
|
@@ -196,37 +172,22 @@ class WebViewActivity : AppCompatActivity(), Mainview {
|
|
|
196
172
|
}
|
|
197
173
|
|
|
198
174
|
override fun exitFullscreen(width: Int, height: Int, left: Int, top: Int) {
|
|
199
|
-
val layoutParams = binding.
|
|
175
|
+
val layoutParams = binding.playerView.layoutParams as RelativeLayout.LayoutParams
|
|
200
176
|
layoutParams.width = width
|
|
201
177
|
layoutParams.height = height
|
|
202
178
|
layoutParams.leftMargin = left
|
|
203
179
|
layoutParams.topMargin = top
|
|
204
180
|
|
|
205
181
|
//set the layout inner and outer sizes
|
|
206
|
-
binding.
|
|
207
|
-
binding.
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
override fun setUrlToView(urlString: String?) {
|
|
211
|
-
binding.url.requestFocus()
|
|
212
|
-
binding.url.setText(urlString)
|
|
213
|
-
binding.url.setSelection(urlString?.length ?: 0)
|
|
182
|
+
binding.playerView.layoutParams = layoutParams
|
|
183
|
+
binding.playerView.layout(width, height, left, top)
|
|
214
184
|
}
|
|
215
185
|
|
|
216
186
|
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
|
|
217
187
|
when (event.keyCode) {
|
|
218
|
-
KeyEvent.KEYCODE_DPAD_RIGHT, KeyEvent.KEYCODE_DPAD_LEFT -> changeFocus()
|
|
219
188
|
KeyEvent.KEYCODE_DPAD_CENTER -> goToUrl()
|
|
220
|
-
KeyEvent.KEYCODE_BACK, KeyEvent.KEYCODE_BUTTON_B, KeyEvent.KEYCODE_BUTTON_A, KeyEvent.KEYCODE_MENU, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, KeyEvent.KEYCODE_MEDIA_PLAY, KeyEvent.KEYCODE_MEDIA_PAUSE, KeyEvent.KEYCODE_MEDIA_FAST_FORWARD, KeyEvent.KEYCODE_MEDIA_REWIND -> {
|
|
221
|
-
if (!binding.url.hasFocus() && !binding.buttonGo.hasFocus()) {
|
|
222
|
-
// Send these key presses to the WebView, through a JavaScript bridge.
|
|
223
|
-
viewModel.sendKeyCode(event.keyCode, MediaEventType.KEY_DOWN)
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
189
|
else -> {
|
|
227
|
-
|
|
228
|
-
viewModel.sendKeyCode(event.keyCode, MediaEventType.KEY_DOWN)
|
|
229
|
-
}
|
|
190
|
+
viewModel.sendKeyCode(event.keyCode, MediaEventType.KEY_DOWN)
|
|
230
191
|
}
|
|
231
192
|
}
|
|
232
193
|
return super.onKeyDown(keyCode, event)
|
|
@@ -254,35 +215,19 @@ class WebViewActivity : AppCompatActivity(), Mainview {
|
|
|
254
215
|
}
|
|
255
216
|
|
|
256
217
|
private fun goToUrl() {
|
|
257
|
-
|
|
258
|
-
viewModel.onClickGo()
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
private fun changeFocus() {
|
|
263
|
-
if (binding.url.hasFocus()) {
|
|
264
|
-
binding.buttonGo.requestFocus()
|
|
265
|
-
} else if (binding.buttonGo.hasFocus()) {
|
|
266
|
-
binding.url.requestFocus()
|
|
267
|
-
}
|
|
218
|
+
viewModel.onClickGo()
|
|
268
219
|
}
|
|
269
220
|
|
|
270
221
|
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
return true
|
|
275
|
-
}
|
|
276
|
-
return super.onKeyUp(keyCode, event)
|
|
222
|
+
// Send these key presses to the WebView, through a JavaScript bridge.
|
|
223
|
+
viewModel.sendKeyCode(event.keyCode, MediaEventType.KEY_UP)
|
|
224
|
+
return true
|
|
277
225
|
}
|
|
278
226
|
|
|
279
227
|
override fun onKeyLongPress(keyCode: Int, event: KeyEvent): Boolean {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
return true
|
|
284
|
-
}
|
|
285
|
-
return super.onKeyLongPress(keyCode, event)
|
|
228
|
+
// Send these key presses to the WebView, through a JavaScript bridge.
|
|
229
|
+
viewModel.sendKeyCode(event.keyCode, MediaEventType.KEY_PRESS)
|
|
230
|
+
return true
|
|
286
231
|
}
|
|
287
232
|
|
|
288
233
|
override fun loadUrl(url: String?) {
|
|
@@ -294,10 +239,6 @@ class WebViewActivity : AppCompatActivity(), Mainview {
|
|
|
294
239
|
}
|
|
295
240
|
}
|
|
296
241
|
|
|
297
|
-
override fun onBackPressed() {
|
|
298
|
-
super.onBackPressed()
|
|
299
|
-
}
|
|
300
|
-
|
|
301
242
|
companion object {
|
|
302
243
|
private val defaultCookieManager: CookieManager = CookieManager().apply {
|
|
303
244
|
setCookiePolicy(CookiePolicy.ACCEPT_ALL)
|