Parcourir la source

Worked on webviews for older version than API level 27 on android for customer support screen

Khubaib il y a 4 mois
Parent
commit
b5a9431e74

+ 1 - 0
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/HelpScreen.kt

@@ -121,6 +121,7 @@ fun Help(navHostController: NavHostController) {
                 AddRowIcon(icon = Icons.AutoMirrored.Filled.Message,
                     text = context.getString(R.string.customer_support),
                     navHostController = navHostController) {
+                    showLoader.value = true
                     navHostController.navigate(
                         Screen.CustomerSupport.route
                     )

+ 190 - 99
app/src/main/java/com/vpn/fastestvpnservice/screens/helpScreensAll/CustomerSupportScreen.kt

@@ -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)