Skip to content

Commit

Permalink
Merge pull request #1 from iflix/hack_to_show_callbacks
Browse files Browse the repository at this point in the history
Hack to show callbacks
  • Loading branch information
dbrain authored Feb 13, 2020
2 parents 75dc81a + 2bb6e51 commit 52d0d3e
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ class IflixPlayerExampleActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)

val intent = Intent(this, IflixPlayerWebViewActivity::class.java)
intent.putExtra(INTENT_IFLIX_ASSET_TYPE, IFLIX_ASSET_TYPE_SHOW) // IFLIX_ASSET_TYPE_MOVIE or IFLIX_ASSET_TYPE_SHOW
intent.putExtra(INTENT_IFLIX_ASSET_ID, "18808") // wheely movie id
intent.putExtra(INTENT_IFLIX_ASSET_TYPE, IFLIX_ASSET_TYPE_MOVIE) // IFLIX_ASSET_TYPE_MOVIE or IFLIX_ASSET_TYPE_SHOW
intent.putExtra(INTENT_IFLIX_ASSET_ID, "128530") // wheely movie id
startActivity(intent)

finish()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package iflix.play.webview.player

import android.content.Context
import android.content.pm.ActivityInfo
import android.os.Build
import android.os.Bundle
Expand All @@ -8,21 +9,23 @@ import android.support.annotation.RequiresApi
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.view.ViewGroup
import android.webkit.PermissionRequest
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebViewClient
import android.support.v4.content.ContextCompat.startActivity
import android.content.Intent
import android.net.Uri
import android.util.Log
import android.support.v4.content.ContextCompat.startActivity


import android.webkit.*
import android.widget.Button
import android.widget.TextView


class IflixPlayerWebViewActivity : AppCompatActivity() {

init {
WebView.setWebContentsDebuggingEnabled(true)
}

private var playing: Boolean = false
private lateinit var magicButton: Button
private lateinit var debugView: TextView
private lateinit var webView: WebView
private lateinit var webChromeClient: VideoEnabledWebChromeClient

Expand All @@ -43,6 +46,16 @@ class IflixPlayerWebViewActivity : AppCompatActivity() {
setContentView(R.layout.activity_webview)

webView = findViewById(R.id.webView)
debugView = findViewById(R.id.debug_view)
magicButton = findViewById(R.id.magic_button)
magicButton.setOnClickListener {
Log.d("MagicButtonDispatch", "MagicButtonDispatch sending " + if (playing) "pause event" else "play event")
webView.evaluateJavascript(if (playing) {
"window.dispatchEvent(new Event('video-pause'));"
} else {
"window.dispatchEvent(new Event('video-play'));"
}) { Log.d("MagicButtonDispatch", "MagicButtonDispatch Result: $it")}
}

// Initialize the VideoEnabledWebChromeClient and set event handlers
val nonVideoLayout = findViewById<View>(R.id.nonVideoLayout)
Expand Down Expand Up @@ -83,6 +96,11 @@ class IflixPlayerWebViewActivity : AppCompatActivity() {
webView.fitsSystemWindows = true

webView.webViewClient = object: WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
setUpEventListeners(view ?: return)
}

override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
if (url.contains("/embed") && url.contains("iflix.com")) {
view.loadUrl(url)
Expand Down Expand Up @@ -114,8 +132,64 @@ class IflixPlayerWebViewActivity : AppCompatActivity() {
val assetType = intent.getStringExtra(INTENT_IFLIX_ASSET_TYPE)
val assetId = intent.getStringExtra(INTENT_IFLIX_ASSET_ID)

val url = "https://www.iflix.com/embed/short/112774"
val url = "https://www.iflix.com/embed/$assetType/$assetId"
webView.loadUrl(url)
bindJavascriptInterface(webView)
}

private fun updateButtonState() {
if (playing) {
magicButton.text = "Pause"
} else {
magicButton.text = "Play"
}
}

private fun setUpEventListeners(webView: WebView) {
webView.evaluateJavascript("""
window.addEventListener('video-isLoaded', function () { iflixCallbacks.isLoaded() });
window.addEventListener('video-isLoading', function () { iflixCallbacks.isLoading() });
window.addEventListener('video-isPlaying', function () { iflixCallbacks.isPlaying() });
window.addEventListener('video-isPaused', function () { iflixCallbacks.isPaused() });
""") {}
}

private fun bindJavascriptInterface(webView: WebView) {
class IflixJavascriptInterface(private val context: Context) {
@JavascriptInterface
fun isLoaded() {
runOnUiThread {
debugView.text = "State: Loaded"
updateButtonState()
}
}

@JavascriptInterface
fun isLoading() {
runOnUiThread {
debugView.text = "State: Loading"
}
}

@JavascriptInterface
fun isPlaying() {
runOnUiThread {
debugView.text = "State: Playing"
playing = true
updateButtonState()
}
}

@JavascriptInterface
fun isPaused() {
runOnUiThread {
debugView.text = "State: Paused"
playing = false
updateButtonState()
}
}
}
webView.addJavascriptInterface(IflixJavascriptInterface(this), "iflixCallbacks")
}

override fun onBackPressed() {
Expand Down
13 changes: 13 additions & 0 deletions player/src/main/res/layout/activity_webview.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,17 @@

</RelativeLayout>

<TextView
android:id="@+id/debug_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Initialising"
android:padding="5dp" />
<Button
android:id="@+id/magic_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/debug_view"
android:text="Initialising" />

</RelativeLayout>

0 comments on commit 52d0d3e

Please sign in to comment.