[ad_1]
I am trying to send cookies in my webview for loading a dashboard, But in Redmi k20 Pro instead of showing the dashboard page, it shows a home screen of my website. I am not sure what is happening in redmi devices. Hear is my code to load the webview.
My website session get expire after 30 mins if my app is idle
import android.annotation.SuppressLint
import android.app.Dialog
import android.content.Context
import android.graphics.Bitmap
import android.os.Build
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.View
import android.view.Window
import android.view.WindowManager
import android.webkit.*
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.annotation.RequiresApi
import com.facebook.shimmer.ShimmerFrameLayout
import com.knowledgelens.ilensapp.data.network.WebRequest
import com.knowledgelens.ilensapp.utils.Common
import com.knowledgelens.ilensapp.utils.TempStore
import android.webkit.WebResourceResponse
import android.webkit.WebResourceRequest
import android.webkit.WebView
import android.net.http.SslError
import android.webkit.SslErrorHandler
import android.webkit.WebResourceError
object Popup {
lateinit var customProgress:Dialog
lateinit var webView: WebView
lateinit var web_llBack: LinearLayout
var shimmerLoadingView: ShimmerFrameLayout? = null
var URL_String_Full=""
lateinit var web_text_heading:TextView
var initial_load:Boolean=true
@SuppressLint("StaticFieldLeak")
fun invoke(context: Context, dashboardIDD: String, name: String, silentCall: Boolean){
Common.editprefs(context,TempStore.DashboardId, dashboardIDD)
Common.editprefs(context,TempStore.DashboardName, name)
if (dashboardIDD.contains("$")){
URL_String_Full =
"${WebRequest(context).BaseUrl}${WebRequest(context).assetSpare}$dashboardIDD${
WebRequest(
context
).assetEndTypeUrl
}"
}else{
URL_String_Full =
"${WebRequest(context).BaseUrl}${WebRequest(context).visualURL}$dashboardIDD${
WebRequest(
context
).typeUrl
}"
}
if(initial_load){
initial_load=false
customProgress = Dialog(context, R.style.full_dialog)
customProgress.requestWindowFeature(Window.FEATURE_NO_TITLE)
customProgress.setContentView(R.layout.custom_webview)
init()
setCookies(URL_String_Full,context)
} else{
init()
loadWebViewWithoutCookie(URL_String_Full)
}
startShimmer()
web_llBack.setOnClickListener {
customProgress.onBackPressed()
}
web_text_heading.text=name
if (!silentCall){
customProgress.show()
}
}
fun loadWebViewWithoutCookie(URL_String_Full: String){
webView.loadUrl(URL_String_Full)
Log.e("urlShow",URL_String_Full)
}
private fun setCookies(baseUrl: String,context: Context) {
val cookieManager = CookieManager.getInstance()
// Clear all the cookies
webView.clearCache(true)
webView.clearFormData()
webView.clearHistory()
webView.clearSslPreferences()
cookieManager.setAcceptCookie(true)
cookieManager.setAcceptThirdPartyCookies(webView, true)
val userId = "user_id=" + Common.getprefs(context, TempStore.user_id, "")
val refreshToken =
Common.getprefs(context, TempStore.base_project_cookie, "").toString()
val loginToken =
"login-token=" + Common.getprefs(context, TempStore.login_token, "").toString()
cookieManager.setCookie(
baseUrl,
userId
)
cookieManager.setCookie(
baseUrl,
refreshToken
)
cookieManager.setCookie(
baseUrl,
loginToken
)
loadDashboard(baseUrl,context)
}
private fun loadDashboard(urlVar: String,context: Context) {
webView.webViewClient = object : WebViewClient() {
val key = "userDetails"
val key1 = "projectDetails"
val key2 = "user_id"
var value = Common.getprefs(context, TempStore.login_JSON_Key, "")
var value1 = Common.getprefs(context, TempStore.encryption_JSON_Key, "")
var username = Common.getprefs(context, TempStore.user_id, "")
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
val js =
"window.localStorage.setItem('$key', '$value');window.localStorage.setItem('$key1', '$value1');window.localStorage.setItem('$key2', '$username');"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript(js, null);
} else {
webView.loadUrl("javascript:$js");
}
}
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
val url: String = request?.url.toString();
view?.loadUrl(url)
return true
}
override fun onLoadResource(view: WebView?, url: String?) {
super.onLoadResource(view, url)
Log.e("webViewMethod","onLoadResource")
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onReceivedError(
view: WebView?,
request: WebResourceRequest?,
error: WebResourceError?
) {
Toast.makeText(context, error!!.description, Toast.LENGTH_SHORT).show()
initial_load = true
}
override fun onReceivedHttpError(
view: WebView?,
request: WebResourceRequest?, errorResponse: WebResourceResponse
) {
Toast.makeText(
context,
"WebView Error" + errorResponse.reasonPhrase,
Toast.LENGTH_SHORT
).show()
super.onReceivedHttpError(view, request, errorResponse)
}
override fun onReceivedSslError(
view: WebView?, handler: SslErrorHandler?,
error: SslError?
) {
Toast.makeText(context, "Certificate is valid till :" + error!!.certificate.validNotAfterDate.toString(), Toast.LENGTH_SHORT).show()
}
override fun onPageCommitVisible(view: WebView?, url: String?) {
super.onPageCommitVisible(view, url)
Log.e("webViewMethod","onPageCommit")
}
}
webView.webChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView, progress: Int) {
if (progress == 100) {
Handler(Looper.getMainLooper()).postDelayed({
stopShimmer()
Log.e("webViewMethod","onProgressChanged")
}, 2500)
}
}
}
Log.e("urlShow",urlVar)
webView.loadUrl(urlVar)
}
private fun startShimmer(){
shimmerLoadingView?.startShimmer()
shimmerLoadingView?.visibility = View.VISIBLE
}
private fun stopShimmer(){
shimmerLoadingView?.stopShimmer()
shimmerLoadingView?.visibility = View.GONE
}
private fun init(){
webView= customProgress.findViewById(R.id.dashboard_webview)
web_llBack= customProgress.findViewById(R.id.web_llback)
web_text_heading= customProgress.findViewById(R.id.web_text_heading)
shimmerLoadingView = customProgress?.findViewById(R.id.shimmer_web_view_container);
if(Build.VERSION.SDK_INT >= 21){
var window: Window = customProgress.window!!
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
}
webView.settings.javaScriptEnabled = true
webView.settings.setRenderPriority(WebSettings.RenderPriority.HIGH)
/* webView.settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK*/
webView.settings.databaseEnabled = true
webView.settings.domStorageEnabled = true
webView.settings.useWideViewPort = true
webView.settings.allowFileAccess = true
webView.settings.setSupportZoom(true)
webView.settings.loadWithOverviewMode = true
webView.settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
webView.settings.loadsImagesAutomatically = true
webView.settings.mixedContentMode = 0
webView.isVerticalScrollBarEnabled = false;
webView.isHorizontalScrollBarEnabled = false;
webView.settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL
webView.settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNS;
webView.isScrollContainer = false;
webView.getSettings()
.setUserAgentString("Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Mobile Safari/537.36");
}
}
[ad_2]