package com.ydl.component.service.web import com.google.gson.JsonObject import com.google.gson.JsonParser import com.hjq.permissions.Permission import com.hjq.permissions.XXPermissions import com.tencent.smtt.sdk.WebView import com.ydl.confide.home.event.ConfideDialogEvent import com.ydl.webview.H5Params import com.ydl.webview.NewH5Activity import com.ydl.ydlcommon.base.BaseActivityMgr import com.ydl.ydlcommon.ui.Loading import com.yidianling.common.tools.ToastUtil import de.greenrobot.event.EventBus class JsMethod(private val webView: WebView?) { fun handle(param: String): Boolean { try { val obj = JsonParser().parse(param).asJsonObject val cmd = obj.getAsJsonObject("cmd") val actionName = cmd?.getAsJsonPrimitive("action_name")?.asString if (actionName.isNullOrBlank()) return false return innerHandle(actionName, cmd) } catch (throwable: Throwable) { throwable.printStackTrace() return false } } private fun innerHandle(actionName: String, obj: JsonObject): Boolean { val param = obj.getAsJsonObject("params") when (actionName) { "handle_confide_btn" -> { val show = param.getAsJsonPrimitive("show").asInt EventBus.getDefault().post(ConfideDialogEvent(show)) return true } "show_loading" -> { val topActivity = BaseActivityMgr.INST.getTopActivity() Loading.show(topActivity) return true } "close_loading" -> { Loading.close() return true } "open_app_eval_list"->{ val url = param.getAsJsonPrimitive("url").asString val topActivity = BaseActivityMgr.INST.getTopActivity() NewH5Activity.start(topActivity, H5Params(url, "")) return true } "toast" -> { val msg = param.getAsJsonPrimitive("msg").asString if (!msg.isNullOrBlank()) { ToastUtil.toastShort(msg) } return true } "has_audio_permission" -> { val callback = param.getAsJsonPrimitive("callback").asString if (callback.isNullOrBlank()) return true val topActivity = BaseActivityMgr.INST.getTopActivity() val grantedPermission = XXPermissions.isGrantedPermission(topActivity, Permission.RECORD_AUDIO) webView?.loadUrl("javascript:$callback(${if (grantedPermission) 1 else 0})") return true } else -> { return false } } } }