Skip to content

Instantly share code, notes, and snippets.

@Ryszardenko
Created September 15, 2020 10:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ryszardenko/c92d06d2329c63a7dbaa38c40b9db4f7 to your computer and use it in GitHub Desktop.
Save Ryszardenko/c92d06d2329c63a7dbaa38c40b9db4f7 to your computer and use it in GitHub Desktop.
// REMEMBER TO ADD FOLLOWING TO YOUR ACTIVITY
// android:configChanges="orientation|screenSize|keyboardHidden"
import android.app.Activity
import android.content.pm.ActivityInfo
import android.graphics.Bitmap
import android.view.View
import android.view.ViewGroup
import android.webkit.WebChromeClient
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.FrameLayout
class FullScreenWebChromeClient(
private val activity: Activity
) : WebChromeClient() {
private val FULL_SCREEN_SETTING = View.SYSTEM_UI_FLAG_FULLSCREEN or
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
View.SYSTEM_UI_FLAG_IMMERSIVE
private var mCustomView: View? = null
private var mCustomViewCallback: CustomViewCallback? = null
private var mOriginalOrientation = 0
private var mOriginalSystemUiVisibility = 0
override fun onHideCustomView() {
(activity.window.decorView as FrameLayout).removeView(mCustomView)
mCustomView = null
activity.window.decorView.systemUiVisibility = mOriginalSystemUiVisibility
activity.requestedOrientation = mOriginalOrientation
mCustomViewCallback?.onCustomViewHidden()
mCustomViewCallback = null
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onShowCustomView(
paramView: View,
paramCustomViewCallback: CustomViewCallback
) {
if (mCustomView != null) {
onHideCustomView()
return
}
mCustomView = paramView
mOriginalSystemUiVisibility = activity.window.decorView.systemUiVisibility
mOriginalOrientation = activity.requestedOrientation
mCustomViewCallback = paramCustomViewCallback
(activity.window.decorView as FrameLayout)
.addView(
mCustomView,
FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
)
activity.window.decorView.systemUiVisibility = FULL_SCREEN_SETTING
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
mCustomView!!.setOnSystemUiVisibilityChangeListener { updateControls() }
}
override fun getDefaultVideoPoster(): Bitmap? {
return Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888)
}
@SuppressLint("SetJavaScriptEnabled")
fun initWebView(webView: WebView, url: String) {
webView.visibility = View.VISIBLE
webView.webViewClient = WebViewClient()
webView.webChromeClient = this
webView.settings.javaScriptEnabled = true
webView.loadUrl(url)
}
private fun updateControls() {
mCustomView?.let {
val params = it.layoutParams as FrameLayout.LayoutParams
params.bottomMargin = 0
params.topMargin = 0
params.leftMargin = 0
params.rightMargin = 0
params.height = ViewGroup.LayoutParams.MATCH_PARENT
params.width = ViewGroup.LayoutParams.MATCH_PARENT
it.layoutParams = params
activity.window.decorView.systemUiVisibility = FULL_SCREEN_SETTING
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment