JsMethod.kt 6.35 KB
Newer Older
刘鹏 committed
1 2 3 4 5 6 7
package com.ydl.js

import android.Manifest
import com.blankj.utilcode.util.PermissionUtils
import com.google.gson.JsonObject
import com.google.gson.JsonParser
import com.tencent.smtt.sdk.WebView
万齐军 committed
8
import com.ydl.audioim.api.IAudioImService
刘鹏 committed
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
import com.ydl.confide.api.IConfideService
import com.ydl.confide.event.ConfideDialogEvent
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
import com.ydl.ydl_router.manager.YDLRouterManager
import com.ydl.ydl_router.manager.YDLRouterParams
import com.ydl.ydlcommon.base.BaseActivityMgr
import com.ydl.ydlcommon.modular.findRouteService
import com.ydl.ydlcommon.router.IYDLRouterConstant
import com.ydl.ydlcommon.utils.Utils
import com.yidianling.common.tools.ToastUtil
import com.yidianling.common.tools.asFragmentActivity
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
                if (PermissionUtils.isGranted(Manifest.permission.RECORD_AUDIO)) {
                    webView?.post {
                        webView.loadUrl("javascript:$callback(1)")
                    }
                    return true
                }
                (webView?.context?.asFragmentActivity())?.let {
                    findRouteService(IConfideService::class.java).requestConfidePermission(it) { granted ->
                        webView.post {
                            webView.loadUrl("javascript:$callback(${if (granted) 1 else 0})")
                        }
                    }
                }
                return true
            }
            "confide_dial" -> {
                //倾诉链接 java接口,支持axb和声网
                val id = param.getAsJsonPrimitive("id").asInt
                val data = param.getAsJsonObject("data").toString()
                val topActivity = BaseActivityMgr.INST.topActivity

万齐军 committed
94
                if (!findRouteService(IAudioImService::class.java).getIsOnlineRtm()) {
刘鹏 committed
95
                    //异常退出或者账号被顶掉,重新登录并拨打
万齐军 committed
96
                    findRouteService(IAudioImService::class.java).loginRtm(JsModularService.getIUserService().getUserInfo()?.uid) { isSuccess: Boolean, _ ->
刘鹏 committed
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
                        if (isSuccess) {
                            findRouteService(IConfideService::class.java).confideDial(id,
                                data,
                                topActivity)
                        } else {
                            ToastUtil.toastShort("请重新拨打")
                        }
                    }
                } else {
                    findRouteService(IConfideService::class.java).confideDial(id, data, topActivity)
                }
                return true
            }
            "check_app_support" -> {
                val callback = param.getAsJsonPrimitive("callback").asString
                val type = param.getAsJsonPrimitive("type").asInt
                if (callback.isNullOrBlank()) return true
                webView?.post {
                    when (type) {
YKai committed
116
                        1,2 -> {//检查音频权限能力
刘鹏 committed
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
                            webView.loadUrl("javascript:$callback(1)")
                        }
                        else -> {
                            webView.loadUrl("javascript:$callback(0)")
                        }
                    }
                }
                return true
            }
            "startCms" ->{
                if (Utils.isFastClick()) {
                    return true
                }
                val activity = BaseActivityMgr.INST.topActivity
                if (JsModularService.getIUserService().loginByOneKeyLogin(activity, true)) {
                    val location = param.getAsJsonPrimitive("location").asInt
                    JsModularService.getImService().startP2PSession(activity, location, null)
                }
                return true
            }

            "to_search_list" ->{
                if (Utils.isFastClick()) {
                    return true
                }
                val cateId = param.getAsJsonPrimitive("cateId").asString
                val cateTitle = param.getAsJsonPrimitive("cateTitle").asString
                YDLRouterManager.router(
                    IYDLRouterConstant.ROUTER_CONSULT_LIST,
                    YDLRouterParams().putExtra(IYDLRouterConstant.EXTRA_CATEID, cateId)
                        .putExtra(IYDLRouterConstant.EXTRA_CATETITLE, cateTitle)
                        .putExtra(IYDLRouterConstant.EXTRA_SHOWTYPE, "0")
                )
                return true
            }
            else -> {
                return false
            }
        }
    }
}