Created
September 15, 2020 10:16
-
-
Save Ryszardenko/c92d06d2329c63a7dbaa38c40b9db4f7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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