mirror of
https://github.com/KuekHaoYang/KVideo.git
synced 2026-08-12 23:33:43 +08:00
98 lines
3.0 KiB
Kotlin
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()
|
|
}
|
|
}
|