|
@@ -5,10 +5,13 @@ import android.app.Activity
|
|
|
import android.content.Intent
|
|
|
import android.graphics.Bitmap
|
|
|
import android.net.Uri
|
|
|
+import android.net.http.SslError
|
|
|
+import android.os.Build
|
|
|
import android.util.Log
|
|
|
import android.view.View
|
|
|
import android.view.ViewGroup
|
|
|
import android.webkit.PermissionRequest
|
|
|
+import android.webkit.SslErrorHandler
|
|
|
import android.webkit.ValueCallback
|
|
|
import android.webkit.WebChromeClient
|
|
|
import android.webkit.WebResourceError
|
|
@@ -81,7 +84,7 @@ fun CustomerSupport(navHostController: NavHostController, activity: ComponentAct
|
|
|
val email = basePreferenceHelper.getUser()?.userinfo?.email ?: ""
|
|
|
val supportUrl = "https://api.fastestvpn.com/v2/chat?device=ios&email=$email"
|
|
|
|
|
|
- var showLoader by remember { mutableStateOf(true) }
|
|
|
+// var showLoader by remember { mutableStateOf(true) }
|
|
|
|
|
|
ShowHeaderCS(navHostController = navHostController)
|
|
|
|
|
@@ -95,105 +98,13 @@ fun CustomerSupport(navHostController: NavHostController, activity: ComponentAct
|
|
|
window.navigationBarColor = colorResource(id = R.color.white).toArgb()
|
|
|
WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = true
|
|
|
|
|
|
- AndroidView(factory = {
|
|
|
- WebView(it).apply {
|
|
|
- layoutParams = ViewGroup.LayoutParams(
|
|
|
- ViewGroup.LayoutParams.MATCH_PARENT,
|
|
|
- ViewGroup.LayoutParams.MATCH_PARENT
|
|
|
- )
|
|
|
- webViewClient = WebViewClient()
|
|
|
-
|
|
|
- settings.javaScriptEnabled = true
|
|
|
- settings.allowContentAccess = true
|
|
|
- settings.allowFileAccess = true
|
|
|
- settings.allowFileAccessFromFileURLs = true
|
|
|
- settings.allowUniversalAccessFromFileURLs = true
|
|
|
- settings.databaseEnabled = true
|
|
|
- settings.domStorageEnabled = true
|
|
|
- settings.loadsImagesAutomatically = true
|
|
|
- settings.builtInZoomControls = true
|
|
|
- settings.displayZoomControls = true
|
|
|
- settings.mediaPlaybackRequiresUserGesture = false
|
|
|
- settings.supportZoom()
|
|
|
- settings.loadWithOverviewMode = true
|
|
|
- setLayerType(View.LAYER_TYPE_NONE, null)
|
|
|
- settings.databaseEnabled = true
|
|
|
-
|
|
|
- webViewClient = object : WebViewClient() {
|
|
|
- override fun onPageStarted(
|
|
|
- view: WebView?,
|
|
|
- url: String?,
|
|
|
- favicon: Bitmap?
|
|
|
- ) {
|
|
|
- super.onPageStarted(view, url, favicon)
|
|
|
- Log.d("test_webview", "onPageStarted")
|
|
|
- showLoader = true
|
|
|
- }
|
|
|
-
|
|
|
- override fun onPageFinished(view: WebView?, url: String?) {
|
|
|
- super.onPageFinished(view, url)
|
|
|
- Log.d("test_webview", "onPageFinished")
|
|
|
- showLoader = false
|
|
|
- }
|
|
|
-
|
|
|
- override fun onReceivedError(
|
|
|
- view: WebView?,
|
|
|
- request: WebResourceRequest?,
|
|
|
- error: WebResourceError?
|
|
|
- ) {
|
|
|
- super.onReceivedError(view, request, error)
|
|
|
- Log.d("test_webview", "onReceivedError")
|
|
|
- showLoader = false
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- webChromeClient = object : WebChromeClient() {
|
|
|
- override fun onPermissionRequest(request: PermissionRequest?) {
|
|
|
- super.onPermissionRequest(request)
|
|
|
- Log.d("test_file_chat", "onActivityResult: onPermissionRequest")
|
|
|
- request?.grant(request.resources)
|
|
|
- }
|
|
|
-
|
|
|
- override fun onShowFileChooser(
|
|
|
- webView: WebView?,
|
|
|
- filePathCallback: ValueCallback<Array<Uri>>?,
|
|
|
- fileChooserParams: FileChooserParams?
|
|
|
- ): Boolean {
|
|
|
- Log.d("test_file_chat", "onActivityResult: onShowFileChooser")
|
|
|
- fileChooserCallback?.onReceiveValue(null)
|
|
|
- fileChooserCallback = filePathCallback
|
|
|
- val selectionIntent = Intent(Intent.ACTION_GET_CONTENT)
|
|
|
- selectionIntent.addCategory(Intent.CATEGORY_OPENABLE)
|
|
|
- selectionIntent.type = "*/*"
|
|
|
- val chooserIntent = Intent(Intent.ACTION_CHOOSER)
|
|
|
- chooserIntent.putExtra(Intent.EXTRA_INTENT, selectionIntent)
|
|
|
- activity.startActivityForResult(chooserIntent, 551)
|
|
|
-
|
|
|
- return true
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- setDownloadListener { uri, userAgent, contentDisposition, mimetype, contentLength ->
|
|
|
- handleURI(
|
|
|
- uri
|
|
|
- )
|
|
|
- }
|
|
|
- setOnLongClickListener { v ->
|
|
|
- handleURI((v as WebView).hitTestResult.extra)
|
|
|
- true
|
|
|
- }
|
|
|
-
|
|
|
-// loadUrl(supportUrl)
|
|
|
- }
|
|
|
- },
|
|
|
- update = {
|
|
|
- Log.d("test_webview", "update")
|
|
|
- it.loadUrl(supportUrl)
|
|
|
- }
|
|
|
- )
|
|
|
+ if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O_MR1) {
|
|
|
+ CustomCSWebView(url = supportUrl, activity)
|
|
|
+ } else {
|
|
|
+ CSWebView(url = supportUrl, activity)
|
|
|
+ }
|
|
|
|
|
|
- if (showLoader) {
|
|
|
+ if (showLoader.value) {
|
|
|
|
|
|
var progress by remember { mutableFloatStateOf(0.1F) }
|
|
|
|
|
@@ -224,6 +135,186 @@ fun CustomerSupport(navHostController: NavHostController, activity: ComponentAct
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+@Composable
|
|
|
+fun CSWebView(url: String, activity: ComponentActivity) {
|
|
|
+ AndroidView(factory = {
|
|
|
+ WebView(it).apply {
|
|
|
+ layoutParams = ViewGroup.LayoutParams(
|
|
|
+ ViewGroup.LayoutParams.MATCH_PARENT,
|
|
|
+ ViewGroup.LayoutParams.MATCH_PARENT
|
|
|
+ )
|
|
|
+ webViewClient = WebViewClient()
|
|
|
+
|
|
|
+ settings.javaScriptEnabled = true
|
|
|
+ settings.allowContentAccess = true
|
|
|
+ settings.allowFileAccess = true
|
|
|
+ settings.allowFileAccessFromFileURLs = true
|
|
|
+ settings.allowUniversalAccessFromFileURLs = true
|
|
|
+ settings.databaseEnabled = true
|
|
|
+ settings.domStorageEnabled = true
|
|
|
+ settings.loadsImagesAutomatically = true
|
|
|
+ settings.builtInZoomControls = true
|
|
|
+ settings.displayZoomControls = true
|
|
|
+ settings.mediaPlaybackRequiresUserGesture = false
|
|
|
+ settings.supportZoom()
|
|
|
+ settings.loadWithOverviewMode = true
|
|
|
+ setLayerType(View.LAYER_TYPE_NONE, null)
|
|
|
+ settings.databaseEnabled = true
|
|
|
+
|
|
|
+ webViewClient = object : WebViewClient() {
|
|
|
+ override fun onPageStarted(
|
|
|
+ view: WebView?,
|
|
|
+ url: String?,
|
|
|
+ favicon: Bitmap?
|
|
|
+ ) {
|
|
|
+ super.onPageStarted(view, url, favicon)
|
|
|
+ Log.d("test_webview", "onPageStarted")
|
|
|
+ showLoader.value = true
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onPageFinished(view: WebView?, url: String?) {
|
|
|
+ super.onPageFinished(view, url)
|
|
|
+ Log.d("test_webview", "onPageFinished")
|
|
|
+ showLoader.value = false
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onReceivedError(
|
|
|
+ view: WebView?,
|
|
|
+ request: WebResourceRequest?,
|
|
|
+ error: WebResourceError?
|
|
|
+ ) {
|
|
|
+ super.onReceivedError(view, request, error)
|
|
|
+ Log.d("test_webview", "onReceivedError")
|
|
|
+ showLoader.value = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ webChromeClient = object : WebChromeClient() {
|
|
|
+ override fun onPermissionRequest(request: PermissionRequest?) {
|
|
|
+ super.onPermissionRequest(request)
|
|
|
+ Log.d("test_file_chat", "onActivityResult: onPermissionRequest")
|
|
|
+ request?.grant(request.resources)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onShowFileChooser(
|
|
|
+ webView: WebView?,
|
|
|
+ filePathCallback: ValueCallback<Array<Uri>>?,
|
|
|
+ fileChooserParams: FileChooserParams?
|
|
|
+ ): Boolean {
|
|
|
+ Log.d("test_file_chat", "onActivityResult: onShowFileChooser")
|
|
|
+ fileChooserCallback?.onReceiveValue(null)
|
|
|
+ fileChooserCallback = filePathCallback
|
|
|
+ val selectionIntent = Intent(Intent.ACTION_GET_CONTENT)
|
|
|
+ selectionIntent.addCategory(Intent.CATEGORY_OPENABLE)
|
|
|
+ selectionIntent.type = "*/*"
|
|
|
+ val chooserIntent = Intent(Intent.ACTION_CHOOSER)
|
|
|
+ chooserIntent.putExtra(Intent.EXTRA_INTENT, selectionIntent)
|
|
|
+ activity.startActivityForResult(chooserIntent, 551)
|
|
|
+
|
|
|
+ return true
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ setDownloadListener { uri, userAgent, contentDisposition, mimetype, contentLength ->
|
|
|
+ handleURI(
|
|
|
+ uri
|
|
|
+ )
|
|
|
+ }
|
|
|
+ setOnLongClickListener { v ->
|
|
|
+ handleURI((v as WebView).hitTestResult.extra)
|
|
|
+ true
|
|
|
+ }
|
|
|
+
|
|
|
+// loadUrl(supportUrl)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ update = {
|
|
|
+ Log.d("test_webview", "update")
|
|
|
+ it.loadUrl(url)
|
|
|
+ }
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
+@Composable
|
|
|
+fun CustomCSWebView(url: String, activity: ComponentActivity) {
|
|
|
+ AndroidView(factory = {
|
|
|
+ val webView = WebView(it).apply {
|
|
|
+ layoutParams = ViewGroup.LayoutParams(
|
|
|
+ ViewGroup.LayoutParams.MATCH_PARENT,
|
|
|
+ ViewGroup.LayoutParams.MATCH_PARENT
|
|
|
+ )
|
|
|
+ webViewClient = WebViewClient()
|
|
|
+
|
|
|
+ settings.javaScriptEnabled = true
|
|
|
+ settings.allowContentAccess = true
|
|
|
+ settings.allowFileAccess = true
|
|
|
+ settings.allowFileAccessFromFileURLs = true
|
|
|
+ settings.allowUniversalAccessFromFileURLs = true
|
|
|
+ settings.databaseEnabled = true
|
|
|
+ settings.domStorageEnabled = true
|
|
|
+ settings.loadsImagesAutomatically = true
|
|
|
+ settings.builtInZoomControls = true
|
|
|
+ settings.displayZoomControls = true
|
|
|
+ settings.mediaPlaybackRequiresUserGesture = false
|
|
|
+ settings.supportZoom()
|
|
|
+ settings.loadWithOverviewMode = true
|
|
|
+ setLayerType(View.LAYER_TYPE_NONE, null)
|
|
|
+ settings.databaseEnabled = true
|
|
|
+
|
|
|
+ webViewClient = object : WebViewClient() {
|
|
|
+ override fun onReceivedSslError(
|
|
|
+ view: WebView?,
|
|
|
+ handler: SslErrorHandler?,
|
|
|
+ error: SslError?
|
|
|
+ ) {
|
|
|
+ handler?.proceed()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ webChromeClient = object : WebChromeClient() {
|
|
|
+ override fun onPermissionRequest(request: PermissionRequest?) {
|
|
|
+ super.onPermissionRequest(request)
|
|
|
+ Log.d("test_file_chat", "onActivityResult: onPermissionRequest")
|
|
|
+ request?.grant(request.resources)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onShowFileChooser(
|
|
|
+ webView: WebView?,
|
|
|
+ filePathCallback: ValueCallback<Array<Uri>>?,
|
|
|
+ fileChooserParams: FileChooserParams?
|
|
|
+ ): Boolean {
|
|
|
+ Log.d("test_file_chat", "onActivityResult: onShowFileChooser")
|
|
|
+ fileChooserCallback?.onReceiveValue(null)
|
|
|
+ fileChooserCallback = filePathCallback
|
|
|
+ val selectionIntent = Intent(Intent.ACTION_GET_CONTENT)
|
|
|
+ selectionIntent.addCategory(Intent.CATEGORY_OPENABLE)
|
|
|
+ selectionIntent.type = "*/*"
|
|
|
+ val chooserIntent = Intent(Intent.ACTION_CHOOSER)
|
|
|
+ chooserIntent.putExtra(Intent.EXTRA_INTENT, selectionIntent)
|
|
|
+ activity.startActivityForResult(chooserIntent, 551)
|
|
|
+
|
|
|
+ return true
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ setDownloadListener { uri, userAgent, contentDisposition, mimetype, contentLength ->
|
|
|
+ handleURI(
|
|
|
+ uri
|
|
|
+ )
|
|
|
+ }
|
|
|
+ setOnLongClickListener { v ->
|
|
|
+ handleURI((v as WebView).hitTestResult.extra)
|
|
|
+ true
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ loadContentWithOkHttp(webView, url)
|
|
|
+ webView
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
fun handleURI(uri: String?) {
|
|
|
if (uri != null) {
|
|
|
val i = Intent(Intent.ACTION_VIEW)
|