|
@@ -1,11 +1,20 @@
|
|
|
package com.vpn.fastestvpnservice.screens.helpScreensAll
|
|
|
|
|
|
import android.annotation.SuppressLint
|
|
|
+import android.content.Intent
|
|
|
import android.graphics.Bitmap
|
|
|
+import android.net.Uri
|
|
|
import android.util.Log
|
|
|
+import android.view.View
|
|
|
import android.view.ViewGroup
|
|
|
+import android.webkit.PermissionRequest
|
|
|
+import android.webkit.ValueCallback
|
|
|
+import android.webkit.WebChromeClient
|
|
|
+import android.webkit.WebResourceError
|
|
|
+import android.webkit.WebResourceRequest
|
|
|
import android.webkit.WebView
|
|
|
import android.webkit.WebViewClient
|
|
|
+import androidx.activity.ComponentActivity
|
|
|
import androidx.compose.foundation.background
|
|
|
import androidx.compose.foundation.layout.Box
|
|
|
import androidx.compose.foundation.layout.BoxScope
|
|
@@ -30,24 +39,23 @@ import androidx.compose.runtime.remember
|
|
|
import androidx.compose.runtime.setValue
|
|
|
import androidx.compose.ui.Alignment
|
|
|
import androidx.compose.ui.Modifier
|
|
|
-import androidx.compose.ui.graphics.Color
|
|
|
import androidx.compose.ui.res.colorResource
|
|
|
import androidx.compose.ui.res.painterResource
|
|
|
-import androidx.compose.ui.text.TextStyle
|
|
|
-import androidx.compose.ui.text.font.FontWeight
|
|
|
-import androidx.compose.ui.text.style.TextAlign
|
|
|
import androidx.compose.ui.tooling.preview.Preview
|
|
|
import androidx.compose.ui.unit.dp
|
|
|
-import androidx.compose.ui.unit.sp
|
|
|
import androidx.compose.ui.viewinterop.AndroidView
|
|
|
import androidx.navigation.NavHostController
|
|
|
import androidx.navigation.compose.rememberNavController
|
|
|
import com.vpn.fastestvpnservice.R
|
|
|
import kotlinx.coroutines.delay
|
|
|
|
|
|
+lateinit var activity1: ComponentActivity
|
|
|
+var fileChooserCallback: ValueCallback<Array<Uri>>? = null
|
|
|
+
|
|
|
@SuppressLint("SetJavaScriptEnabled")
|
|
|
@Composable
|
|
|
-fun CustomerSupport(navHostController: NavHostController) {
|
|
|
+fun CustomerSupport(navHostController: NavHostController, activity: ComponentActivity) {
|
|
|
+ activity1 = activity
|
|
|
Box(
|
|
|
modifier = Modifier
|
|
|
.fillMaxWidth()
|
|
@@ -58,10 +66,11 @@ fun CustomerSupport(navHostController: NavHostController) {
|
|
|
|
|
|
ShowHeaderCS(navHostController = navHostController)
|
|
|
|
|
|
- Box(modifier = Modifier
|
|
|
- .padding(top = 60.dp, bottom = 0.dp)
|
|
|
- .fillMaxSize()
|
|
|
- .background(MaterialTheme.colorScheme.onPrimary)
|
|
|
+ Box(
|
|
|
+ modifier = Modifier
|
|
|
+ .padding(top = 60.dp, bottom = 0.dp)
|
|
|
+ .fillMaxSize()
|
|
|
+ .background(MaterialTheme.colorScheme.onPrimary)
|
|
|
) {
|
|
|
|
|
|
val email = "sagartestaccount@gmail.com"
|
|
@@ -84,10 +93,17 @@ fun CustomerSupport(navHostController: NavHostController) {
|
|
|
settings.loadsImagesAutomatically = true
|
|
|
settings.builtInZoomControls = true
|
|
|
settings.displayZoomControls = true
|
|
|
- settings.mediaPlaybackRequiresUserGesture = true
|
|
|
+ settings.mediaPlaybackRequiresUserGesture = false
|
|
|
+ settings.supportZoom()
|
|
|
+ settings.loadWithOverviewMode = true
|
|
|
+ setLayerType(View.LAYER_TYPE_NONE, null)
|
|
|
|
|
|
webViewClient = object : WebViewClient() {
|
|
|
- override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
|
|
|
+ override fun onPageStarted(
|
|
|
+ view: WebView?,
|
|
|
+ url: String?,
|
|
|
+ favicon: Bitmap?
|
|
|
+ ) {
|
|
|
super.onPageStarted(view, url, favicon)
|
|
|
Log.d("test_webview", "onPageStarted")
|
|
|
showLoader = true
|
|
@@ -98,6 +114,53 @@ fun CustomerSupport(navHostController: NavHostController) {
|
|
|
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, 0)
|
|
|
+
|
|
|
+ return true
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ setDownloadListener { uri, userAgent, contentDisposition, mimetype, contentLength ->
|
|
|
+ handleURI(
|
|
|
+ uri
|
|
|
+ )
|
|
|
+ }
|
|
|
+ setOnLongClickListener { v ->
|
|
|
+ handleURI((v as WebView).hitTestResult.extra)
|
|
|
+ true
|
|
|
}
|
|
|
|
|
|
// loadUrl(supportUrl)
|
|
@@ -108,32 +171,43 @@ fun CustomerSupport(navHostController: NavHostController) {
|
|
|
it.loadUrl(supportUrl)
|
|
|
}
|
|
|
)
|
|
|
- }
|
|
|
- if (showLoader) {
|
|
|
|
|
|
- var progress by remember { mutableFloatStateOf(0.1F) }
|
|
|
+ if (showLoader) {
|
|
|
|
|
|
- LaunchedEffect(key1 = Unit) {
|
|
|
- for (i in 1..100) {
|
|
|
- progress = i.toFloat()/100F
|
|
|
- delay(50)
|
|
|
+ var progress by remember { mutableFloatStateOf(0.1F) }
|
|
|
+
|
|
|
+ LaunchedEffect(key1 = Unit) {
|
|
|
+ for (i in 1..100) {
|
|
|
+ progress = i.toFloat() / 100F
|
|
|
+ delay(50)
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- Box(modifier = Modifier
|
|
|
- .fillMaxSize()
|
|
|
- .background(MaterialTheme.colorScheme.onPrimary)) {
|
|
|
- CircularProgressIndicator(
|
|
|
- progress = progress,
|
|
|
+ Box(
|
|
|
modifier = Modifier
|
|
|
- .align(Alignment.Center)
|
|
|
- .size(50.dp),
|
|
|
- colorResource(id = R.color.appYellow),
|
|
|
- strokeWidth = 5.dp,
|
|
|
- )
|
|
|
+ .fillMaxSize()
|
|
|
+ .background(MaterialTheme.colorScheme.onPrimary)
|
|
|
+ ) {
|
|
|
+ CircularProgressIndicator(
|
|
|
+ progress = progress,
|
|
|
+ modifier = Modifier
|
|
|
+ .align(Alignment.Center)
|
|
|
+ .size(50.dp),
|
|
|
+ colorResource(id = R.color.appYellow),
|
|
|
+ strokeWidth = 5.dp,
|
|
|
+ )
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
+fun handleURI(uri: String?) {
|
|
|
+ if (uri != null) {
|
|
|
+ val i = Intent(Intent.ACTION_VIEW)
|
|
|
+ i.data = Uri.parse(uri.replaceFirst("^blob:".toRegex(), ""))
|
|
|
+ activity1.startActivity(i)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -173,28 +247,10 @@ fun BoxScope.ShowHeaderCS(navHostController: NavHostController) {
|
|
|
|
|
|
)
|
|
|
}
|
|
|
-
|
|
|
-// Column(
|
|
|
-// modifier = Modifier
|
|
|
-// .fillMaxWidth()
|
|
|
-// .fillMaxHeight()
|
|
|
-// .padding(top = 100.dp)
|
|
|
-// .padding(16.dp)
|
|
|
-// .background(Color.Transparent)
|
|
|
-// .verticalScroll(rememberScrollState())
|
|
|
-// ) {
|
|
|
-// Text(text = TermsAndConditionsDesc,
|
|
|
-// style = TextStyle(
|
|
|
-// fontSize = 14.sp,
|
|
|
-// lineHeight = 26.sp,
|
|
|
-// color = MaterialTheme.colorScheme.primary
|
|
|
-// )
|
|
|
-// )
|
|
|
-// }
|
|
|
}
|
|
|
|
|
|
@Preview
|
|
|
@Composable
|
|
|
fun CustomerSupportPreview() {
|
|
|
- CustomerSupport(navHostController = rememberNavController())
|
|
|
+// CustomerSupport(navHostController = rememberNavController())
|
|
|
}
|