105 lines
4.1 KiB
Kotlin
105 lines
4.1 KiB
Kotlin
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()
|
||
}
|
||
}
|