Files
KVideo/android-tv/app/src/main/java/com/kvideo/tv/MainActivity.kt
T

98 lines
3.0 KiB
Kotlin

package com.kvideo.tv
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import android.view.WindowManager
import android.webkit.WebChromeClient
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.activity.ComponentActivity
class MainActivity : ComponentActivity() {
companion object {
/**
* The URL of your deployed KVideo instance.
* Change this to your own domain or IP address.
*/
private const val KVIDEO_URL = "https://kvideo.example.com"
}
private lateinit var webView: WebView
@SuppressLint("SetJavaScriptEnabled")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Fullscreen immersive mode
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
@Suppress("DEPRECATION")
window.decorView.systemUiVisibility = (
View.SYSTEM_UI_FLAG_FULLSCREEN
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
)
setContentView(R.layout.activity_main)
webView = findViewById(R.id.webview)
webView.apply {
setLayerType(View.LAYER_TYPE_HARDWARE, null)
settings.apply {
javaScriptEnabled = true
domStorageEnabled = true
mediaPlaybackRequiresUserGesture = false
loadWithOverviewMode = true
useWideViewPort = true
cacheMode = WebSettings.LOAD_DEFAULT
mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
databaseEnabled = true
}
webViewClient = WebViewClient()
webChromeClient = WebChromeClient()
loadUrl(KVIDEO_URL)
}
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
// Map D-pad center to Enter for spatial navigation
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
webView.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER))
return true
}
return super.onKeyDown(keyCode, event)
}
override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
webView.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER))
return true
}
return super.onKeyUp(keyCode, event)
}
@Deprecated("Use OnBackPressedDispatcher")
override fun onBackPressed() {
if (webView.canGoBack()) {
webView.goBack()
} else {
@Suppress("DEPRECATION")
super.onBackPressed()
}
}
override fun onDestroy() {
webView.destroy()
super.onDestroy()
}
}