didvan-app/android/app/src/main/kotlin/com/example/didvan/FullscreenWebViewActivity.kt

105 lines
4.1 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.didvan.didvanapp
import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import android.webkit.PermissionRequest
import android.webkit.WebChromeClient
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
class FullscreenWebViewActivity : AppCompatActivity() {
private lateinit var webView: WebView
private val PERMISSION_REQUEST_CODE = 1234
private var pendingPermissionRequest: PermissionRequest? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
webView = WebView(this)
setContentView(webView)
val url = intent.getStringExtra("url") ?: "https://www.google.com"
val settings = webView.settings
settings.javaScriptEnabled = true
settings.mediaPlaybackRequiresUserGesture = false
settings.allowContentAccess = true
settings.allowFileAccess = true
settings.domStorageEnabled = true
settings.databaseEnabled = true
settings.cacheMode = WebSettings.LOAD_DEFAULT
webView.webViewClient = WebViewClient()
webView.webChromeClient = object : WebChromeClient() {
override fun onPermissionRequest(request: PermissionRequest?) {
runOnUiThread {
if (request == null) {
super.onPermissionRequest(request)
return@runOnUiThread
}
val requestedResources = request.resources
val permissionsNeeded = mutableListOf<String>()
for (resource in requestedResources) {
when (resource) {
PermissionRequest.RESOURCE_VIDEO_CAPTURE -> {
if (ContextCompat.checkSelfPermission(this@FullscreenWebViewActivity, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
permissionsNeeded.add(Manifest.permission.CAMERA)
}
}
PermissionRequest.RESOURCE_AUDIO_CAPTURE -> {
if (ContextCompat.checkSelfPermission(this@FullscreenWebViewActivity, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
permissionsNeeded.add(Manifest.permission.RECORD_AUDIO)
}
}
}
}
if (permissionsNeeded.isNotEmpty()) {
// درخواست پرمیژن runtime
pendingPermissionRequest = request
ActivityCompat.requestPermissions(this@FullscreenWebViewActivity, permissionsNeeded.toTypedArray(), PERMISSION_REQUEST_CODE)
} else {
// پرمیژن ها داده شده، قبول کن درخواست رو
request.grant(request.resources)
}
}
}
}
webView.loadUrl(url)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
if (requestCode == PERMISSION_REQUEST_CODE) {
var allGranted = true
for (result in grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
allGranted = false
break
}
}
if (allGranted) {
pendingPermissionRequest?.grant(pendingPermissionRequest?.resources)
} else {
pendingPermissionRequest?.deny()
}
pendingPermissionRequest = null
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
}
override fun onDestroy() {
super.onDestroy()
webView.destroy()
}
}